spring boot 在不同環境下讀取不同配置文件的一種方式


在工程中,通常有根據不同的環境讀取不同配置文件的需求,對於spring boot 來說,默認讀取的是application.yml 或者 application.properties。為了區分不同的環境,也提供了profile的機制。例如,當有一個開發環境的配置文件為application-dev.yml的時候,通過設置 spring.profiles.actives = dev, 程序啟動的時候,會優先取 application-dev.yml中的值,然后再去取 application.yml 中的值。

通過占位符來減少信息冗余

為了最小的減少信息冗余,可以結合spring properties中的 placeholder 來減少配置文件的編寫和維護,舉個例子。在 application.properties中,我將數據庫的url配置如下;

spring:
  datasource:
    url: jdbc:mysql://${dbs.database.host}:${dbs.database.port}/${dbs.database.databasename}

這樣,在對於不同環境的配置文件,我只需要配置:

dbs:
  database:
    host: x.x.x.x
    port: 3306
    username: user
    password: password
    databasename: test

通過修改--spring.config.location的值來決定配置文件的讀取順序

如前文所說,spring boot 會根據profile的變量,來決定不同環境配置文件中的值的優先級,但是配置文件的讀取順序,還是先讀取application.yml,再讀取applicaiotn-{profile}.yml。所以如果照着上一節的設置方式,程序啟動會報錯,提示找不 ${dbs.database.host} 這個變量。這樣反應了,spring properties在解析占位符之前,是要先定義這個占位符變量的。

為了解決這個問題,可以在程序啟動參數里面,通過設置 --spring.config.location 來修改properties的讀取順序,例如可以設置成

--spring.config.location=classpath:/config/application-test.yml,classpath:/config/application.yml

這樣,就會優先讀取application-test.yml中的內容,避開了報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM