springboot如何书写配置文件,包括.properties和.yml的配置文件,集成第三方配置,自定义属性,多环境配置

配置文件

在springboot支持以.properties和.yml结尾的配置文件

application.properties 格式如下:

#mysql 配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://ip:port/dataDB
spring.datasource.username=root
spring.datasource.password=root
#redis 配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=name

application.yml 格式如下:

spring:
  #mysql配置
  datasource:
    url: jdbc:mysql://ip:port/dataDB
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  #redis配置
  redis:
    host: 127.0.0.1
    port: 6379
    password: root

比较喜欢使用yml的方式,因为yml的代码更少而且层级关系更明显

集成第三方

集成第三方其实特别简单,比如Redis,步骤如下:

  • pom.xml中引入starter对应的redis依赖:spring-boot-starter-data-redis
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • application.yml 配置文件中配置相关属性
spring:
  #redis配置
  redis:
    host: 127.0.0.1
    port: 6379
    password: root

自定义属性

自定义属性就是在springboot中将在配置文件中自己定义的配置读取出来,一般使用的方式有两种,两个注解 @Value和@ConfigurationProperties

在配置文件中自定义属性如下:

my:
  name: chenmingyu
  age: 12
@Value注解
/**
 * @auther: chenmingyu
 * @date: 2018/11/3 22:32
 * @description:
 */
@RestController
public class UserController {

    @Value("${my.name}")
    private String name;
    @Value("${my.age}")
    private Integer age;

    @GetMapping("/getUserInfo")
    private String getUserInfo(){

        return String.format("@Value注入: %s_%s",name,age);
    }
}

访问: http://localhost:8080/getUserInfo

@ConfigurationProperties注解

定义一个user对象

/**
 * @auther: chenmingyu
 * @date: 2018/11/3 22:30
 * @description:
 */
@Data
@Component
@ConfigurationProperties(prefix = "my")
public class User {

    private String name;

    private Integer age;

}

使用的时候直接注入bean使用

@Resource
private User user;

@GetMapping("/getUserInfoByBean")
private String getUserInfoByBean(){
    return String.format("@ConfigurationProperties注入: %s_%s",user.getName(),user.getAge());
}

访问: http://localhost:8080/getUserInfoByBean

多环境配置

springboot的多环境配置文件名需要满足application-{profile}.properties的格式,{profile}对应你的环境
比如新建三个配置文件:

dev:开发环境,prod:生产环境,test:测试环境
在application-dev.yml 中配置:

my:
  environment: dev

在application-prod.yml 中配置:

my:
  environment: prod

在application-test.yml 中配置:

my:
  environment: test

写个Controller测试一下:

/**
 * @auther: chenmingyu
 * @date: 2018/11/3 23:33
 * @description:
 */
@RestController
public class propertiesController {

    @Value("${my.environment}")
    private String environment;

    @GetMapping("/getEnvironment")
    private String getEnvironment(){
        return String.format("environment: %s",environment);
    }
}

在application.yml 中指定dev环境:

spring:
  #多环境配置
  profiles:
    active: dev

访问:http://localhost:8080/getEnvironment

修改application.yml 中指定prod环境:

spring:
  #多环境配置
  profiles:
    active: prod

访问:http://localhost:8080/getEnvironment