一般我們在使用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的基礎上進行補全或者覆蓋變量。
