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