说明: 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注解,加了反而还会导致懒加载定时任务不执行