spring集成nacos只作为配置中心

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、重新赋值给项目中需要变动的字段,让其动态更新

本人也是学习探究,有不正确的地方,欢迎讨论学习!

猜你喜欢

转载自blog.csdn.net/qq_38653981/article/details/134143833