基于spring-boot框架,监听nacos配置变化(比如运行中改变日志级别)

背景

如果想在运行过程中想基于nacos数据变更做一些业务,比如想在运行过程中变更日志的级别,那么我们可以扩展nacos的监听。

步骤
  • 定义一个配置类,用@NacosConfigListener标记需要触发的方法,并用dataId标记需要监听的文件。如下:
@Slf4j
@Configuration
public class LoggingLevelConfig {

    /**
     * 刷新
     */
    @NacosConfigListener(dataId = Constants.CONFIG_FILE_NAME)
    public void refresh(String msg) {

    }
}

需要注意的是这个方法必须要有一个String类型参数,否则不会生效;这个参数就是变更后的文件;

  • 解析变更内容
    这里有两个思路
    • 第一个是自己解析字符串;
    • 第二个就是利用nacos自动刷新的机制,定义一个配置属性类,然后从这个类里面获取最新的属性值;这里要注意的是被 @NacosConfigListener标记的方法和nacos自动刷新的先后顺序是不能被保证的;我的思路是,开启一个新线程然后可以Sleep几秒后从配置类中读取最新的值。

所以最终的代码:

@Slf4j
@Configuration
public class DemoLoggingLevelConfig {

    @Resource
    private SomePropertiesConfig propertiesConfig;

    @Resource
    private LoggingSystem loggingSystem;

    /**
     * 通用线程池
     */
    @Resource
    private ThreadPoolTaskExecutor commonTaskExecutor;

    /**
     * 动态刷新
     */
    @NacosConfigListener(dataId = Constants.XXX)
    public void refresh(String msg) {
       // 线程池处理多线程
        taskExecutor.submit(() -> {
            try {
                Thread.sleep(4000);
                log.info("最新的值:{}", propertiesConfig.getDynamicLogger());
                // 通过loggingSystem
            } catch (Exception e) {
                log.error("异常:{}", e.getLocalizedMessage(), e);
            }
        });
    }
}

over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值