Spring Boot的應(yīng)用環(huán)境感知自識別配置解決方案
1. Spring Boot應(yīng)用集成etcd配置源
起衣杆怕,2018.1.2
在分布式米诉、云化的系統(tǒng)里爸吮,應(yīng)用的配置(尤其是依賴服務(wù)的配置、環(huán)境相關(guān)的配置)都存儲到應(yīng)用的本地配置文件里會給維護帶來很大的麻煩鸭叙,而且 docker 更是將應(yīng)用本身做成了鏡像,更難以在本地的配置文件里去存儲一些部署環(huán)境相關(guān)的信息焕梅。所以通常在整個系統(tǒng)里會有一個公共的配置服務(wù)输吏,配置服務(wù)統(tǒng)一集中地維護其他系統(tǒng)的配置信息,再通過網(wǎng)絡(luò)分發(fā)色洞。Spring Cloud Config 就是 Spring 推出的解決方案戏锹,不過在自己的應(yīng)用里還不想為此再起 Java 進程,就選擇了較為輕量級的 etcd 來作為配置服務(wù)火诸。
2. Apollo - 攜程
Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心锦针,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置惭蹂,配置修改后能夠?qū)崟r推送到應(yīng)用端伞插,并且具備規(guī)范的權(quán)限、流程治理等特性盾碗,適用于微服務(wù)配置管理場景媚污。
3. Spring Boot自定義配置屬性源(PropertySource)
caosh,2017.12.5
配置覆蓋優(yōu)于profile
在生產(chǎn)實踐中廷雅,配置覆蓋是解決不同環(huán)境不同配置的常用方法耗美。比如用生產(chǎn)服務(wù)器上的配置文件覆蓋包內(nèi)的文件京髓,或者使用中心化的配置服務(wù)來覆蓋默認的業(yè)務(wù)配置。
相比于profile機制商架,即不同環(huán)境使用不同的配置文件堰怨,覆蓋的方式更有優(yōu)勢。程序員在開發(fā)時不需要關(guān)心生產(chǎn)環(huán)境數(shù)據(jù)庫的地址蛇摸、賬號等信息备图,一次構(gòu)建即可在不同環(huán)境中運行,而profile機制需要將生產(chǎn)環(huán)境的配置寫到項目資源文件中赶袄,而且要為不同環(huán)境使用不同的構(gòu)建參數(shù)或者運行參數(shù)揽涮。
Spring提供了靈活的配置擴展能力,有多種方式將自定義的屬性源集成進來饿肺,可以輕松地實現(xiàn)配置覆蓋蒋困。
自定義屬性源工廠
如果想要更加靈活的自定義屬性源,比如實現(xiàn)從中心化的配置服務(wù)加載配置敬辣,可以通過實現(xiàn) PropertySourceFactory
接口雪标,并通過配置 @PropertySource
注解的 factory 參數(shù)來實現(xiàn)。
4. Spring Boot自定義配置源
atheva溉跃,2017.10.17
概述
如果我們有遠程配置村刨,如何把她引入進來呢。
實現(xiàn)方式
- 通過
EnvironmentPostProcessor
接口把我們自定義的PropertySource
加入Environment
中(相對簡單但沒那么“優(yōu)雅”) - 參考
Spring Cloud
中的做法喊积,也只需要 3 步(相對比較復(fù)雜一點)
小結(jié)
上面只是拋磚引玉烹困,這樣無論是哪里的數(shù)據(jù)源,都可以通過這種方式編寫乾吻,把配置交給 Spring 管理髓梅。這樣再也不怕在本地配置文件中出現(xiàn)敏感信息啦,再也不怕修改配置文件需要登錄每一臺機器修改啦绎签。
祝玩得開心枯饿!ˇ?ˇ
云舒,2017.10.4诡必,杭州