springboot的多个配置文件的关系


一般我们在使用springboot时会用到多个环境下的配置文件,例如

application-dev.yml:开发环境 
application-uat.yml:用户验收测试环境 
application-prod.yml:生产环境 

那他们和application.yml有什么关系呢?

配置文件的启用(激活)需要在application.yml中配置如下来激活dev的配置

  spring:
  profiles:
  active: dev
  现在我们使用dev配置,那application.yml文件是不是就不起作用了呢?不是的,我们可以分为几种情况
  1.在application.yml中配置的有,但在dev中没有的变量,
  2.在application.yml中配置的没有,但在dev中有的变量,
  3.在application.yml中配置的有,但在dev中也有。
  先看一下我们的配置文件,然后我们来分别验证三种情况。
  application.yml
server:
  port: 8080
spring:
  profiles:
    active: dev
mypropertis:
  name: main
  age: 23
mypro:
  name: pro
  age: 100

  application-dev.yml

server:
  port: 8000
mypropertis:
  age: 30
  address: 北京市
  phone: ${random.int(12345,12346)} #12345-12346内的随机整数
  uid: ${random.uuid}
  profile: ${random.value} #32位的随机字符串

  controller

 @Autowired
    MyPropertis myPropertis;
    /**
     * 测试从application.yml为对象赋值
     * @return mypropertis
     */
    @GetMapping("/propertis")
    public MyPropertis propertis(){
        return myPropertis;
    }

  bean类

@Data
@Component
@ConfigurationProperties(prefix = "mypropertis")
public class MyPropertis {
    private String name;
    private Integer age;
    private String address;
    private int phone;
    private String uid;
    private String profile;
}

  下面我们开始测试。

  第一种,在application.yml中配置的有,但在dev中没有的变量,我们的配置文件中的mypro刚好符合。那我们就把bean类中的注解@ConfigurationProperties(prefix = "mypropertis")修改为@ConfigurationProperties(prefix = "mypro")进行测试。测试结果为

  第二种,在application.yml中配置的没有,但在dev中有的变量,例如我们的配置文件中的mypropertis.address。那我们就把bean类中的注解写为@ConfigurationProperties(prefix = "mypropertis")进行测试。测试结果为

 

第三种,在application.yml中配置的有,但在dev中也有,例如我们的配置文件中的mypropertis.age。这个其实刚刚的测试就可以,可以发现系统采用了dev中的配置将其覆盖了。

总结,配置文件以application.yml为基础,dev等配置文件在application.yml的基础上进行补全或者覆盖变量。

 




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM