目录

前言

创建springboot项目后,默认生成了有一个aplication.properties配置文件,这个里面是项目的属性配置,默认的是properties配置文件,但在springboot中还可以使用.yml来配置,使用yml来说,属性格式要简单的多,所以推荐大家使用。

这里基本的配置我不讲,主要讲引用配置文件的参数和多生产环境配置。

创建aplication.yml

在resources文件夹下创建aplication.yml文件,删除原有的properties配置文件。

怎样看yml配置文件是否有效呢?编写yml文件:

server:
  port: 8081

注:因为yml的语法原因,port:后面必须要有一个空格,否则配置不生效。

运行项目,然后使用8081端口访问项目,能成功访问则成功。

引用配置文件中自定义的参数

有时候我们需要在配置文件中配置一些参数,这些参数是自定义的,那我们怎么配置参数并使用呢?

自定义配置参数

假设我们定义一个人,人有两个参数,尺寸和年龄。

man:
  size: M
  age: 22

SpringBoot - 项目属性配置(引用配置文件的参数和多生产环境配置)

那配置好了,我们怎么拿到配置的参数值呢?方法有很多,可以直接通过@Value注解拿到。

@Value("${man.size}")
private String size;

@Value("${man.age}")
private Integer age;

但是如果配置参数很多呢,显然不适用,我说一下我认为最合理的方法。

创建实体

package cn.notemi.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Title:ManProperties
 * Description:
 *
 * @author Flicker
 * @create 2017-08-03 下午 4:05
 **/
@Component
@ConfigurationProperties(value = "man")
public class ManProperties {
    private Integer age;
    private String size;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }
}

@ConfigurationProperties获取前缀是man的配置映射过来。

@Component注入配置。

使用

package cn.notemi.controller;

import cn.notemi.properties.ManProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Title:HelloController
 * Description:
 *
 * @author Flicker
 * @create 2017-08-03 下午 3:48
 **/
@RestController
public class HelloController {

    @Autowired
    private ManProperties manProperties;

    @RequestMapping(value = "/hello")
    public String index(){

        return manProperties.getSize() + manProperties.getAge();
    }
}

@Autowired注入,获取值。

多环境切换

平时做项目难免会遇到开发环境和生产环境不同的配置,如何快捷的切换环境配置呢,在这里也有很好的解决办法。

我们先将配置文件复制为三份。

SpringBoot - 项目属性配置(引用配置文件的参数和多生产环境配置)

比如我们的生产环境需要的配置是这样的,我们编写aplication-prod.yml为:

server:
  port: 8081
man:
  size: S
  age: 20

开发环境是这样的,编写aplication-dev.yml:

server:
  port: 8080
man:
  size: M
  age: 22

然后我们设置当前使用哪一个环境,编写aplication.yml:

spring:
  profiles:
    active: dev

这里的dev就是应用aplication-dev,相同的如果改正prod,就应用aplication-prod。

也就是说aplication.yml中我们可以放不同生产环境都会用到的配置,通过profiles:active来应用其他配置。

aplication-*中就是不同生产环境需要用到的不同配置。