各個(gè)微服務(wù)想要使用配置中心服務(wù)非常簡(jiǎn)單,僅需要在bootstrap.yaml
(或.properties
)文件中稍作配置即可
1.添加依賴
`org.springframework.cloud:spring-cloud-starter-config:${cloud_config}`
2.配置上下文
bootstrap.yaml
中添加
spring:
application:
name: config-client
cloud:
config:
# 配置中心地址
uri: http://localhost:8888
# 要應(yīng)用的配置文件
profile: dev
# 要讀取的配置文件名
name: bravo
# 對(duì)應(yīng)服務(wù)端security設(shè)置的用戶名密碼
username: pkaq
password: pkaqx
注意這里是
bootstrap.yml
而不是appliction.yml
,因?yàn)?code>bootstrap.yml會(huì)在應(yīng)用啟動(dòng)之前讀取, 而spring.cloud.config.uri
會(huì)影響應(yīng)用啟動(dòng),關(guān)于上下文可參見(jiàn)如下內(nèi)容.
2.1 啟動(dòng)上下文
Spring Cloud會(huì)創(chuàng)建一個(gè)Bootstrap Context
杆烁,作為Spring應(yīng)用的Application Context
的父上下文伍俘。初始化的時(shí)候,Bootstrap Context
負(fù)責(zé)從外部源加載配置屬性并解析配置。這兩個(gè)上下文共享一個(gè)從外部獲取的Environment
魔慷。Bootstrap
屬性有高優(yōu)先級(jí)乞旦,默認(rèn)情況下哲思,它們不會(huì)被本地配置覆蓋卦溢。 Bootstrap context
和Application Context
有著不同的約定,所以新增了一個(gè)bootstrap.yml
文件泵殴,而不是使用application.yml
(或者application.properties
)涮帘。保證Bootstrap Context
和Application Context
配置的分離。
推薦在bootstrap.yml
or application.yml
里面配置spring.application.name
. 你可以通過(guò)設(shè)置spring.cloud.bootstrap.enabled=false
來(lái)禁用bootstrap
笑诅。
2.2 應(yīng)用上下文層次結(jié)構(gòu)
如果你通過(guò)SpringApplication
或者SpringApplicationBuilder
創(chuàng)建一個(gè)Application Context
,那么會(huì)為spring應(yīng)用的Application Context
創(chuàng)建父上下文Bootstrap Context
调缨。在Spring里有個(gè)特性,子上下文會(huì)繼承父類的property sources
and profiles
吆你,所以main application context
相對(duì)于沒(méi)有使用Spring Cloud Config弦叶,會(huì)新增額外的property sources
。額外的property sources
有:
- “bootstrap” : 如果在
Bootstrap Context
掃描到PropertySourceLocator
并且有屬性妇多,則會(huì)添加到CompositePropertySource
伤哺。Spirng Cloud Config
就是通過(guò)這種方式來(lái)添加的屬性的,詳細(xì)看源碼ConfigServicePropertySourceLocator
者祖。下面也也有一個(gè)例子自定義的例子立莉。 - “applicationConfig: [classpath:bootstrap.yml]” ,(如果有
spring.profiles.active=production
則例如applicationConfig: [classpath:/bootstrap.yml]#production)
: 如果你使用bootstrap.yml
來(lái)配置Bootstrap Context
七问,他比application.yml
優(yōu)先級(jí)要低桃序。它將添加到子上下文,作為Spring Boot應(yīng)用程序的一部分烂瘫。下文有介紹。
由于優(yōu)先級(jí)規(guī)則,Bootstrap Context
不包含從bootstrap.yml
來(lái)的數(shù)據(jù)坟比,但是可以用它作為默認(rèn)設(shè)置芦鳍。
bootstrap.yml
是由spring.cloud.bootstrap.name
(默認(rèn):”bootstrap”)或者spring.cloud.bootstrap.location
(默認(rèn)空)
覆蓋遠(yuǎn)程屬性
property sources
被bootstrap context
添加到應(yīng)用通常通過(guò)遠(yuǎn)程的方式,比如”Config Server”葛账。默認(rèn)情況下柠衅,本地的配置文件不能覆蓋遠(yuǎn)程配置,但是可以通過(guò)啟動(dòng)命令行參數(shù)來(lái)覆蓋遠(yuǎn)程配置籍琳。如果需要本地文件覆蓋遠(yuǎn)程文件菲宴,需要在遠(yuǎn)程配置文件里設(shè)置授權(quán)
spring.cloud.config.allowOverride=true
(這個(gè)配置不能在本地被設(shè)置)。一旦設(shè)置了這個(gè)權(quán)限趋急,你可以配置更加細(xì)粒度的配置來(lái)配置覆蓋的方式喝峦,
比如:
spring:
cloud:
config:
# 覆蓋任何本地屬性
overrideNone: true
# 僅僅系統(tǒng)屬性和環(huán)境變量
overrideSystemProperties: false
源文件見(jiàn)PropertySourceBootstrapPropertie
3.啟動(dòng)服務(wù),大功告成.
端口號(hào)采用配置中心相應(yīng)配置文件的端口
啟動(dòng)后訪問(wèn) http://localhost:port/say
參考