当一个项目中的服务数量增加后,配置文件也会相应地增加。而多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,这样每个服务都可以通过 Nacos进行共享配置的读取。
六、配置中心使用教程2:共享配置
1,基本用法
(1)我们在之前的基础上,增加两个配置:share-config1.properties 和share-config2.properties(仍然使用默认 Group)。
其中share-config1.properties 配置的内容如下:
share.config1=共享配置1
而 share-config2.properties 配置的内容如下:
share.config2=共享配置2
(2)接着修改项目的配置文件 bootstrap.properties,通过spring.cloud.nacos.config.shared-configs 属性指定要读取共享配置文件的 DataID(多个文件用,分隔):
注意:这种方式虽然简单,但无法指定分组(必须与默认配置在同一个 Group),也无法自动刷新。
spring.cloud.nacos.config.shared-configs=share-config1.properties,share-config2.properties
(3)接着我们对之前的 Controller进行修改,在原来的基础上增加了共享配置里的属性获取与输出:
@RefreshScope
@RestController
public class HelloController {
@Value("${from}")
private String from;
@Value("${share.config1}")
private String shareConfig1;
@Value("${share.config2}")
private String shareConfig2;
@GetMapping("/test")
public String test(){
return this.from + "
" + this.shareConfig1 + "
" + this.shareConfig2;
}
}
(4)启动项目,访问/test 接口,可以看到无论是项目默认配置的内容,还是共享配置的内容,都能成功获取到:
2,进阶用法
(1)前面的样例中共享配置必须与项目默认配置文件处于相同的 Group,但有时我们共享配置是处于其他分组的,比如下面我们新增了两个配置 share-config3.properties和 share-config4.properties(分别处于 SHARE3_GROUP和 SHARE4_GROUP):
(2)接着同样修改项目的配置文件bootstrap.properties,不过这次我们使用 spring.cloud.nacos.config.extension-configs[0] 属性来指定各个共享配置的 dataId、group 以及是否自动刷新。
注意:同上面的方式相比,这种方式可以指定分组,也支持自动刷新。
spring.cloud.nacos.config.extension-configs[0].data-id=share-config3.properties
spring.cloud.nacos.config.extension-configs[0].group=SHARE3_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=share-config4.properties
spring.cloud.nacos.config.extension-configs[1].group=SHARE4_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true
(3)接着我们对之前的 Controller进行修改,在原来的基础上增加了共享配置里的属性获取与输出:
@RefreshScope
@RestController
public class HelloController {
@Value("${from}")
private String from;
@Value("${share.config3}")
private String shareConfig3;
@Value("${share.config4}")
private String shareConfig4;
@GetMapping("/test")
public String test(){
return this.from + "
" + this.shareConfig3 + "
" + this.shareConfig4;
}
}
(4)启动项目,访问/test 接口,可以看到无论是项目默认配置的内容,还是共享配置的内容(即使不在同一个分组),都能成功获取到(并且支持自动刷新):
附:两种方式结合使用
(1)上面这两种共享配置的实现方式不是互斥的,在同一个项目中可以结合使用:
spring.cloud.nacos.config.shared-configs=share-config1.properties,share-config2.properties
spring.cloud.nacos.config.extension-configs[0].data-id=share-config3.properties
spring.cloud.nacos.config.extension-configs[0].group=SHARE3_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=share-config4.properties
spring.cloud.nacos.config.extension-configs[1].group=SHARE4_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true
(2)Controller这边稍作修改,将各个共享配置里的属性都输出到页面上,运行结果如下:
@RefreshScope
@RestController
public class HelloController {
@Value("${from}")
private String from;
@Value("${share.config1}")
private String shareConfig1;
@Value("${share.config2}")
private String shareConfig2;
@Value("${share.config3}")
private String shareConfig3;
@Value("${share.config4}")
private String shareConfig4;
@GetMapping("/test")
public String test(){
return this.from + "
" + this.shareConfig1 + "
" + this.shareConfig2
+ "
" + this.shareConfig3 + "
" + this.shareConfig4;
}
}