擴展配置(extended configurations)
通過之前的學習,我們知道應用引入nacos配置中心之后默認將會加載Data ID= ${prefix} - ${spring.profiles.active} . ${file-extension} 默認Group為public的配置文件,並且可以通過下面三個參數指定修改默認的配置文件:
- spring.cloud.nacos.config.prefix
- spring.cloud.nacos.config.file-extension
- spring.profiles.active
有時候一個模塊項目需要多個配置文件,這時候我們就可以使用nacos的擴展配置參數(extended configurations)引用同一個namesapce下面更多的配置文件。
第一步:創建多個配置文件。我們在默認的namespace下創建了三個配置文件,其中nacos-consumer.properties配置在默認的組DEFAULT_GROUP,database.properties和log.properties則配置在Group_A組里。
- database.properties配置內容是:database.url=127.0.0.1
- log.properties配置配置內容是:log.data=/home/logs
- consumer.properties配置配置內容是:config.address=shanghai
第二步:應用引入nacos注冊中心,加載多個配置文件。
<!--注冊中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.0.127:8848 #注冊中心地址
config:
server-addr: 192.168.0.127:8848 #配置中心地址
ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
- data-id: database.properties
group: GROUP_A
refresh: true
- data-id: log.properties
group: GROUP_A
refresh: true
server:
port: 17358
ext-config配置是一個數組List類型,每個配置中包含三個參數:data-id、group,refresh。其中refresh參數用於控制這個配置文件中的內容時候是否支持自動刷新,默認情況下,只有默認加載的配置才會自動刷新,對於這些擴展的配置加載內容需要配置該設置時候才會實現自動刷新。
第三步:使用配置參數,驗證結果。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumer {
public static void main(String[] args) {
SpringApplication.run(NacosConsumer.class,args);
}
@RefreshScope
@RestController
public class TestController {
@Value("${config.address}")
private String address;
@Value("${database.url}")
private String url;
@Value("${log.data}")
private String data;
@GetMapping("/getConfig")
public String getConfig() {
return "address:"+address+" url:"+url+" data:"+data;
}
}
}
共享配置(shared configurations)
上面的擴展配置實際上是一種namesapce下的共享配置,根據上一篇文章環境隔離的經典案例划分,就是一種企業內各項目之間的共享配置。有時候我們希望有些配置文件只在同一個項目下的不同的環境之間共享(實際上是一種group下的共享配置),這時候就可以使用Nacos的共享配置(shared configurations)去實現。
添加一個內容為database.url=127.0.0.2的新的配置文件database.properties,Group為DEFAULT_GROUP。
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.0.127:8848 #注冊中心地址
config:
server-addr: 192.168.0.127:8848 #配置中心地址
ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
- data-id: database.properties
group: GROUP_A
refresh: true
- data-id: log.properties
group: GROUP_A
refresh: true
#可以加載當前group下面的多個配置文件
shared-dataids: database.properties
refreshable-dataids: database.properties
server:
port: 17358
我們發現結果是相同的,首先我們先來看下應用加載這些配置文件的順序,可以從控制台看到配置的文件的加載順序:
Loading nacos data, dataId: 'database.properties', group: 'DEFAULT_GROUP'
Loading nacos data, dataId: 'database.properties', group: 'GROUP_A'
Loading nacos data, dataId: 'log.properties', group: 'GROUP_A'
Loading nacos data, dataId: 'nacos-consumer.properties', group: 'DEFAULT_GROUP'
1、先加載shared-dataids配置
2、再加載ext-config配置
3、最后加載默認配置
因為shared-dataids配置被最先加載,所以后面的ext-config配置會覆蓋前面的配置,所以導致新增加的database.properties沒有起作用。
刪掉group為GROUP_A的database.properties文件之后,屏蔽掉相關配置,重啟應用結果就會發生改變。
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.0.127:8848 #注冊中心地址
config:
server-addr: 192.168.0.127:8848 #配置中心地址
ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
# - data-id: database.properties
# group: GROUP_A
# refresh: true
- data-id: log.properties
group: GROUP_A
refresh: true
#可以加載當前group下面的多個配置文件
shared-dataids: database.properties
refreshable-dataids: database.properties
server:
port: 17358