Springboot配置文件的管理優化

目錄

需求

常見方式

自定義配置


需求

在開發的應用的時候總是需要有多環境的配置,本地測試dev,測試服務器部署test,正式服務器部署prod,各個開發團隊可能還有其他配置需求,這種配置文件是需要經常改的,可以寫在一起,每次改的時候吧不需要的部分打成註釋,但是多了以後相當麻煩,還容易出錯。

我的開發環境是Springboot,也現在用的越來越多的框架,逐漸走向主流,配置文件主要有兩種.properties和.yml,後者是Springboot的特色。

常見方式

框架提供多種加載配置文件的方式

1.最常見的@PropertySource在Bean的頭上括號參數是配置文件的路徑 @Value給變量自動賦值

2.@ConfigurationProperties + @PropertySource + @Value

3.YamlPropertiesFactoryBean + @Value

4.Environment自動生成Bean,內包含了所有配置信息

Springboot會自動加載配置文件,配置的是Springboot的自動配置類,配置的名稱必須對應包裏存在的,這種系統配置文件有固定的命名格式和指定的位置才能被Springboot讀取並解析

有以下4個位置

(項目文件):./config/
(項目文件):./
(resources類路徑):/config/
(resources類路徑):/

命名必須以application開頭

在主要的yml裏配置
spring.profiles.active: dev 系統就會自動的按以上順序在項目中找,同樣名字的以優先先的爲準。這樣在切換環境的時候就只用改這一個地方。  

自定義配置

但是,以上配置都不是自定義的參數。自定義配置文件可以出現在resources裏的任何位置,通過@PropertySource等註解裏的路徑去找,不受系統環境管理,每次切換環境還得到配置文件裏打註釋,經常會忘而且麻煩。

最開始想到的是弄一個工具類,通過@Value讀取所有配置,然後代碼在用着工具類的配置,這樣就只需要改兩個地方。缺點:還是得改兩個地方,一旦配置文件加減字段時,工具類也得動,麻煩。

後來的解決辦法

建立三個自定以配置文件,可以和系統文件不放在一起,畢竟有四個位置可以放,四選一。

在application-dev.yml中配置spring.profiles.include: config-dev,完美的解決了自定義配置和系統配置的綁定。再用Environment的方法讀取

@Autowired
private Environment env;

env.getProperty("hello")
注意一個坑,Environment的Bean加載可能要比其他Bean晚,所以在給其他Bean類的全局變量賦值時可能是個null,所以只能在方法裏使用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章