在Spring cloud里面,使用spring.cloud.nacos.config可以把项目使用的配置放到nacos服务器上去管理,极大的方便了配置文件的修改管理还原备份复制等一系列后期维护动作。有nacos配置中心在,使得项目的配置维护变得方便了不少,这示范一下Spring cloud nacos config从一个和多个配置文件获取配置信息的例子。
1,从一个配置文件中获取配置
配置比较简单,在bootstrap.properties里面如下就行:
spring.application.name=spring-cloud-example
server.port=9999
spring.cloud.nacos.config.server-addr=192.168.1.191:8848
spring.cloud.nacos.config.namespace=test
spring.cloud.nacos.config.group=tdca
spring.cloud.nacos.config.prefix=lxk
spring.profiles.active=spring-nacos-config
spring.cloud.nacos.config.file-extension=properties
配置中有使用的nacos的服务器地址,namespace,group
没有dataId,其实dataId是根据后面的3个配置拼出来的。
data id = ${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile
注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,
dataId = ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。
目前只支持 properties 和 yaml 类型。
上面使用的配置拼出来的data id = lxk-spring-nacos-config.properties
代码中通过使用@value注解,就能获取到nacos server里面的配置信息
再使用 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新,
即nacos server web页面修改了配置,发布之后,使用这个配置的地方能即使的得到这个更新操作,算热加载吧。
2,从多个配置文件获取配置:
spring.application.name=spring-cloud-example
server.port=9999
# spring nacos config 配置相关,
spring.cloud.nacos.config.server-addr=192.168.1.191:8848
spring.cloud.nacos.config.namespace=test
spring.cloud.nacos.config.ext-config[0].group=tdca
spring.cloud.nacos.config.ext-config[0].data-id=tdca-1.properties
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].group=tdca
spring.cloud.nacos.config.ext-config[1].data-id=tdca-2.properties
spring.cloud.nacos.config.ext-config[1].refresh=true
就如上所示就配置了2个,这个数组形式的可以配置多个。若是多个文件中有相同的key,那就是后面的覆盖前面的。
我在上面 1和 2 里面都放置一样的key,最终使用的是2里面的配置信息。
还有就是:经测试,下面这个方式,好像不太好使的样子。
spring.cloud.nacos.config.shared-dataids=tdca-1.properties,tdca-2.properties
spring.cloud.nacos.config.refreshable-dataids=tdca-1.properties,tdca-2.properties
使用的测试代码地址,在github上了,可以下载试试。
3,nacos服务器上的properties配置注意问题
3.1 nacos服务器上的properties配置文件中不能存在注释说明,即#开头的注释说明;还有properties文件中=等号两边不能有空格,不然你在使用@value的时候,可能会拿不到配置的。我就遇到了这个问题。这估计是nacos或者Spring cloud nacos config的bug吧。
3.2 在使用@value的地方,给model加上 @RefreshScope 这样的话,就会支持热加载,即服务器配置更新了,代码里面使用的时候,就是服务器上最新的,可能有一丢丢延迟,5秒,或者30秒左右吧。