我有一个监控应用程序,其中我正在运行一个fixedRate任务。这是拉入一个配置参数配置与领事。我想拉入更新的配置,所以我添加了@RefreshScope。但只要我更新领事上的配置值,fixedRate任务停止运行。
@Service
@RefreshScope
public class MonitorService {
@Autowired
private AppConfig appConfig;
@PostConstruct
public void postConstRun() {
System.out.println(appConfig.getMonitorConfig());
}
@Scheduled(fixedRate = 1000)
public void scheduledMonitorScan() {
System.out.println("MonitorConfig:" + appConfig.getMonitorConfig());
}
}
AppConfig类只有一个String参数:
@Configuration
@Getter
@Setter
public class AppConfig {
@Value("${monitor-config:default value}")
private String monitorConfig;
}
我一更新consul中的值,计划任务就停止运行(在sheduledMonitorScan方法中显示)停止显示。
5条答案
按热度按时间nmpmafwu1#
我使用
RefreshScopeRefreshedEvent
成功地从consult配置服务器获取并覆盖了这些值drnojrws2#
以下是我们解决此问题的方法。
因此,我们定义了一个接口,它不做任何特别的事情,但允许我们调用一个刷新的作业。
这是实际作业,可以刷新其参数
from.properties
。更新:当然,AJob bean必须在@Configuration中标记@RefreshScope
8i9zcol23#
我的解决方案包括听
EnvironmentChangeEvent
然后使用
ContextLifecycleScheduledTaskRegistrar
重新创建任务。属性定义:
主要定义:
esyap4oy4#
根据前面的回答,我添加了以下接口,并在
@RefreshScope
注解bean上使用它: