spring集成nacos只作为配置中心
一、nacos简介
Nacos中文官网:https://nacos.io/zh-cn/docs/what-is-nacos.html
nacos可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
微服务可以通过配置nacos的注册地址,连接nacos完成服务注册。
微服务可以通过开启配置中心,完成动态刷新配置文件。
二、探究nacos作为配置中心
本次调研,只是想做到对配置文件动态刷新,所以不涉及注册中心部分,而且注册中心相对简单容易,只需要配好注册中心地址即可完成。
配置中心:
1、首先需要引入pom 也就是nacos的spring-context依赖
因为公司项目是基于spring框架的,所以我们不用原生、springboot、springcloud的方式。
- 但是请注意,boot和cloud的配置刷新注解不一致,除了yml配置文件外,还有cloud需要在类上加@RefreshScope,字段上加@Value(${“xx”});
- boot是spring的增强,基本一致,就是@NacosValue(${xxx}),做好配置连接。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>1.1.1</version>
</dependency>
2、spring方式配置nacos连接
项目中配置nacos的地址相关参数,采用注解方式。
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "具体的模块名字", autoRefreshed = true)
public class NacosConfiguration {
}
3、@NacosValue注解使用(要注意加上autoRefreshed = true)
本次针对配置文件中,每一个配置项进行动态刷新,一旦配置项的值发生变化,则程序中同步的值也发生变化,同时自定义一个【ConfigEditUtil】工具类完成本地文件的重写操作。
- 具体要对SystemEnvironment的值做重新赋值操作,所以不是直接对字段进行赋值,而是set重写赋值方式。
@Component
public class EnvConfigAll {
protected static final Loggerx LOGGERX = Loggerx.getLogger("console");
@NacosValue(value = "${xx}", autoRefreshed = true)
public void setNewVal(String newVal) {
LOGGERX.info(String.format(Locale.CHINA,"本次对平xx进行重新加载,新的xx:%s",newVal));
SystemEnvironment.xx = newVal;
//将本地配置文件也同步修改之
ConfigEditUtil.editConfig("xx", newVal);
}
}
以上就是针对spring版本的,nacos只作为配置中心的集成说明。
补充说明:动态刷新监听
如果需要全量监听配置文件的变化,那么就需要对nacos的配置中心做手动监听。
主要做法:重新注入ApplicationListener,当有Event事件变动的时候,对变动内容做操作。
- Tips:event不仅有getContent(),还有getType(),getGroupId()等等,看实际情况进行获取。
@Component
public class EnvConfig {
protected static final Loggerx LOGGERX = Loggerx.getLogger("console");
@Bean
public ApplicationListener<NacosConfigReceivedEvent> nacosConfigReceivedEventApplicationListener() {
return event -> {
//处理来自nacos的动态配置变更
String content = event.getContent();
LOGGERX.info(String.format("本次nacos刷新的全部内容:%s",content));
};
}
}
对于event监听,也可以使用@NacosConfigListener对指定的dataId、groupId下的配置文件做监听。这种更细致,而且注解开发简单。
@NacosConfigListener(dataId = DATA_ID)
public void onMessage(String config) {
//todo 对更新的配置文件做操作
}
三、总结
spring集成nacos做配置中心,并且实现nacos上动态修改配置项,项目也可以动态变化的主要做法如下:
1、添加pom依赖
2、配置连接配置中心的配置类
3、自定义容器,借助@NacosValue注解,动态获取nacos上最新的配置项的值
4、重新赋值给项目中需要变动的字段,让其动态更新
本人也是学习探究,有不正确的地方,欢迎讨论学习!