Spring Boot的應用環(huán)境感知自識別配置解決方案
1. Spring Boot應用集成etcd配置源
起衣,2018.1.2
在分布式、云化的系統(tǒng)里,應用的配置(尤其是依賴服務的配置、環(huán)境相關的配置)都存儲到應用的本地配置文件里會給維護帶來很大的麻煩,而且 docker 更是將應用本身做成了鏡像,更難以在本地的配置文件里去存儲一些部署環(huán)境相關的信息。所以通常在整個系統(tǒng)里會有一個公共的配置服務,配置服務統(tǒng)一集中地維護其他系統(tǒng)的配置信息,再通過網(wǎng)絡分發(fā)。Spring Cloud Config 就是 Spring 推出的解決方案,不過在自己的應用里還不想為此再起 Java 進程,就選擇了較為輕量級的 etcd 來作為配置服務。
2. Apollo - 攜程
Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應用端,并且具備規(guī)范的權限、流程治理等特性,適用于微服務配置管理場景。
3. Spring Boot自定義配置屬性源(PropertySource)
caosh,2017.12.5
配置覆蓋優(yōu)于profile
在生產(chǎn)實踐中,配置覆蓋是解決不同環(huán)境不同配置的常用方法。比如用生產(chǎn)服務器上的配置文件覆蓋包內(nèi)的文件,或者使用中心化的配置服務來覆蓋默認的業(yè)務配置。
相比于profile機制,即不同環(huán)境使用不同的配置文件,覆蓋的方式更有優(yōu)勢。程序員在開發(fā)時不需要關心生產(chǎn)環(huán)境數(shù)據(jù)庫的地址、賬號等信息,一次構建即可在不同環(huán)境中運行,而profile機制需要將生產(chǎn)環(huán)境的配置寫到項目資源文件中,而且要為不同環(huán)境使用不同的構建參數(shù)或者運行參數(shù)。
Spring提供了靈活的配置擴展能力,有多種方式將自定義的屬性源集成進來,可以輕松地實現(xiàn)配置覆蓋。
自定義屬性源工廠
如果想要更加靈活的自定義屬性源,比如實現(xiàn)從中心化的配置服務加載配置,可以通過實現(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 步(相對比較復雜一點)
小結
上面只是拋磚引玉,這樣無論是哪里的數(shù)據(jù)源,都可以通過這種方式編寫,把配置交給 Spring 管理。這樣再也不怕在本地配置文件中出現(xiàn)敏感信息啦,再也不怕修改配置文件需要登錄每一臺機器修改啦。
祝玩得開心!ˇ?ˇ
云舒,2017.10.4,杭州