SpringCloud 如何提取公共配置
SpringCloud 提取公共配置
在開發(fā)微服務項目時,通常會有很多服務,此時會用配置中心來管理這些服務的配置,但有些服務可能會有相同的配置,比如數(shù)據(jù)源配置,eureka server注冊中心地址配置,actuator開放端口配置等,很多的服務都需要,如果每個服務都寫一份這樣相同的配置,服務一多,也挺麻煩的,并且如果要換一個數(shù)據(jù)庫或注冊中心,每個服務都得改,很麻煩,所以就需要將這些公共的配置提取出來,放到公共的配置文件中,而這些服務去引用這些配置即可。
原本服務的配置文件可能是這樣的:
spring: application: name: eureka-client cloud: config: uri: http://localhost:8888 #配置中心地址 label: master profile: dev
此時服務默認會去config找名字為eureka-client-dev.yml的配置文件,這個配置文件里可能有eureka server地址,數(shù)據(jù)源配置,redis配置等,而另一個服務的配置文件可能也有這些相同的配置,這時就可以將這些相同的配置提取出來,放到多個配置文件中,讓服務去讀取這些配置文件,比如可能有base-dev.yml來放各個服務公共的配置,datasource-dev.yml來存放數(shù)據(jù)源配置,而eureka-client-dev.yml是這個服務獨有的配置,這些配置文件都在config server中,則服務的工程中的配置文件則可以改成這樣:
spring: application: name: eureka-client cloud: config: uri: http://localhost:8888 #配置中心地址 label: master profile: dev name: eureka-client,base,datasource
這樣eureka-client服務就會去配置中心讀取這3個配置文件,其他的服務如果需要,直接在自身的配置中在spring.cloud.config.name屬性中添加文件名即可,而不用再寫相同的配置了。
SpringCloud config 多服務共享公共配置的解決
問題描述
我們公司的項目是基于SpringCloud開發(fā)的微服務,用到了Spring-Cloud-Config作為微服務統(tǒng)一的配置中心,可以將散落在各個服務的配置進行統(tǒng)一配置管理。
雖然配置中心將各個應用的配置文件進行了統(tǒng)一管理, 但是涉及到的一些公共配置,比如數(shù)據(jù)庫連接,redis連接,ftp連接等,依然還散落在各個應用的配置文件中,并沒有抽取,我們需要根據(jù)環(huán)境的不同,而動態(tài)修改它們,非常難以維護。導致每次涉及修改這些公共配置,就非常老火。
所以想到了利用公共文件方法,現(xiàn)在在這里簡單闡述一下如何配置。(下面例子Spring-Cloud-Config-Server都是使用本地配置方式)。
經(jīng)過網(wǎng)上查閱資料,大部分都是采用方法一進行配置的,那么我提供了一個方式二配置,也許會讓你眼前一亮,然后留下你的想法,如果是你去選擇,會選擇哪個方法呢?
方法一:
首先在配置中心的 config/ 目錄下創(chuàng)建一個公共配置文件common.yml, 然后在各個應用下的 bootstrap.yml 文件中 spring.cloud.config.name 這里去配置多個配置文件名。
例如:
service-a 客戶端的 bootstap.yml:
spring: cloud: config: name: service-a, common
service-b 客戶端的 bootstap.yml:
spring: cloud: config: name: service-b, common
方法二:(比較推薦)
我們還記得springboot單體應用的時候, 是如何抽離公共配置呢?答案是用spring.profiles.include 進行引用其他公共配置文件。而且它的文件命名有個特點,就是必須是application-開頭的配置文件。
我們也會去想,像spring-cloud-config這樣的配置集中化,這樣的配置會生效嗎?
例如:
首先,我們在 config/ 目錄下創(chuàng)建 application-common-dev.yml 配置文件
然后分別修改 service-a 和 service-b 在 config/ 目錄下的配置文件,配置如下:
service-a 客戶端的 service-a-dev.yml
spring: application: name: service-a #公共配置文件 profiles: include: common-dev
service-b 客戶端的 service-b-dev.yml
spring: application: name: service-b #公共配置文件 profiles: include: common-dev
分別啟動各自的服務,就可以看到服務啟動成功。
那么,這兩種方式那種更好一些呢?
方法一:
缺點:如果有新加的公共配置文件,需要去每個服務的bootstrap.yml都去修改一下。并且需要重新發(fā)布jar包。
方法二:
優(yōu)點:配置可以外部化,而且修改配置文件,不需要單獨發(fā)布jar包。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
javacv開發(fā)詳解之調(diào)用本機攝像頭視頻
這篇文章主要介紹了javacv開發(fā)詳解之調(diào)用本機攝像頭視頻,對javacv感興趣的同學,可以參考下2021-04-04mybatisplus?實現(xiàn)接口MetaObjectHandler自動填充字段值
MetaObjectHandler是MyBatis-Plus提供的一個接口,本文主要介紹了mybatisplus?實現(xiàn)接口MetaObjectHandler自動填充字段值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Eclipse中引入com.sun.image.codec.jpeg包報錯的完美解決辦法
Java開發(fā)中對圖片的操作需要引入 com.sun.image.codec.jpeg,但有時引入這個包會報錯,利用下面的操作可以完成解決這個問題2018-02-02java快速解析路徑中的參數(shù)(&與=拼接的參數(shù))
這篇文章主要介紹了java快速解析路徑中的參數(shù)(&與=拼接的參數(shù)),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-02-02springboot將mybatis升級為mybatis-plus的實現(xiàn)
之前項目工程用的是mybatis,現(xiàn)在需要將其替換為mybatis-plus,本文主要介紹了springboot將mybatis升級為mybatis-plus的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-09-09