寫在前面
本文是對我之前一篇文章《Spring Cloud+nacos+Feign,實現注冊中心及配置中心》的補充。此文章中簡單寫了如何將Nacos作為配置中心。在使用配置中心時,我們會遇到一種情況:多個微服務中有相同的配置,在配置中心中我們也就希望使用同一個dataId的配置。本文就是說明如何解決這個問題的。
多服務共用一個dataId
關於dataId,Nacos官網是這么解釋的:
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix
默認為spring.application.name
的值,也可以通過配置項spring.cloud.nacos.config.prefix
來配置。spring.profile.active
即為當前環境對應的 profile,詳情可以參考 Spring Boot文檔。 注意:當spring.profile.active
為空時,對應的連接符-
也將不存在,dataId 的拼接格式變成${prefix}.${file-extension}
file-exetension
為配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension
來配置。目前只支持properties
和yaml
類型
上面的這段寫的明白,我們可以用spring.cloud.nacos.config.prefix來替代spring.application.name的值。看到這里,大家肯定會認為,如果要多個服務共用一個dataId的配置,我將多個服務的spring.cloud.nacos.config.prefix寫成一樣的不就可以了嗎?然后興高采烈的去配置文件里做了這個配置,再啟動程序,然后測試,可郁悶的發現,沒有起作用。。。。。。。。,是不是很傷心,官方文檔明明這么寫的,卻不起作用。
之所以沒有起作用,是因為官方文檔里雖然寫了用spring.cloud.nacos.config.prefix配置,但沒有寫在哪里寫這個配置,大家往往根據經驗,寫在了application.properties中,不對的,文檔里沒寫,這個配置是要寫在bootstrap.properties中,工程中沒有這個文件?那就自己新建一個,和application.properties在相同路徑下。
下面是我代碼中的配置,我用的yaml格式,其他代碼,參照《Spring Cloud+nacos+Feign,實現注冊中心及配置中心》
server: port: 7080 spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 prefix: chris file-extension: yaml application: name: demo2
Nacos對應的截圖為:
上圖中,兩個箭頭所指要注意:配置格式選擇了YAML,配置內容就要按照YAML格式來寫,配置格式選擇了Properties,配置內容要按照Properties來寫,不要搞錯了。