我想使用控制器动态设置cron表达式值。这是我的代码段。
@Service
@EnableScheduling
@Configuration
@PropertySources({
@PropertySource("classpath:properties/cron.properties")
})
public class SchedulerServiceImpl implements SchedulerService{
private final static Logger log = LoggerFactory.getLogger(SchedulerServiceImpl.class);
@Value( "${cron.expression}")
private String cronValue;
@Scheduled(cron = "${cron.expression}")
public void getTweetsFromAPI(){
log.info("Trying to make request for get Tweets through TweetController.");
log.debug("----------------Executing cron.expression {}----------------",cronValue);
}
}
如何在部署后动态设置cron.expression值。如果我使用控制器并替换属性文件现有值,它是否有效?
答案 0 :(得分:0)
从逻辑上讲,你的问题是错误的。 Cron表达式用于在指定时间内调度方法,即该方法将在每天中午12点的指定时间执行。
现在,如果您正在动态更改cron表达式值,这意味着您正在控制此方法的执行而不是错误的调度程序。
您可以执行以下操作: -
@Value( "${cron.expression1}")
private String cron1;
@Value( "${cron.expression2}")
private String cron2;
@Scheduled(cron=cron1)
public void method1(){
//call to method
this.method();
}
@Scheduled(cron=cron2)
public void method2(){
//call to method
this.method();
}
private void method(){
//Your scheduling logic goes here
}
在这里,你重复使用方法()在两个不同的时间安排。