说明: nacos服务版本:1.4.1

问题: 在定时器类中使用nacos注解动态刷新,变更配置中心的配置后,项目监听到了变更,但是会使定时器无法执行的问题。

解决方案:

nacos动态配置的数据统一放到一个类中,在更新nacos配置后,配置类会出现懒加载,即访问时才加载,如果将变更的变量放到定时器类中,那么定时器就会懒加载,导致定时器无法执行!

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

/**
 * nacos统一动态配置类
 * @author tyg
 * @date 2021-04-15 15:57
 */
@RefreshScope
@Configuration
public class DynamicConfig {

    @Value("${demo.number:10}")
    public Integer number;

    public Integer getNumber(){
        return this.number;
    }
}

3. 定时器中调用示例:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 定时器demo
 * @author tyg
 * @date 2021-04-15 9:50
 */
@Component
public class DemoTask {

    @Resource
    private DynamicConfig dynamicConfig;

    @Scheduled(fixedDelay = 5000)
    public void run(){
        System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + " demo.number=" + dynamicConfig.getNumber());
    }
}

———————————————— 版权声明:本文为CSDN博主「朝如青丝·暮成雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_26365837/article/details/115767907

简单总结:

在定时任务中使用配置属性,在动态刷新时会因为懒加载,导致定时任务不执行。

解决方法:

将定时任务中需要使用的配置属性,抽取到一个或多个配置类中管理,在定时任务类中使用get()获取。

小提示:

不要在定时任务类上加@RefreshScope注解,加了反而还会导致懒加载定时任务不执行