我有一个计划在春季的工作,我从我的数据库中得到它的cron。每次执行时,下一个执行时间都会更新。所以,如果它被配置为每10分钟运行一次,我可以将该值更改为数据库以每15分钟计划一次该作业。春季更新调度程序
问题是我必须等待执行才能获得更新的cron:如果每15分钟计划一次作业,并且我希望将此值更改为每2分钟一次,则必须等待下一次执行(最多15分钟)每2分钟完成一次这项工作。
更新数据库后,有没有办法让这项工作重新安排?
我想销毁并刷新这个bean,但它不工作(也许这是不可能的或者在我的实现中出现错误)。也许有办法触发一个事件来执行方法configureTask。
这里是我的预定工作的片段。
@EnableScheduling
@Component
public class MyClass implements SchedulingConfigurer {
private static final String JOB = "My personal task";
@Autowired
JobRepository jobRepository;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Hello World!");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
JobScheduled byJobNameIgnoreCase = jobRepository.findByJobNameIgnoreCase(JOB); // read from database
String cron = byJobNameIgnoreCase.getCrontab();
CronTrigger trigger = new CronTrigger(cron);
return trigger.nextExecutionTime(triggerContext);
}
});
}
}
我发现这个链接,但它不工作.. [http://stackoverflow.com/questions/39152599/interrupt-spring-scheduler-task-before-next-invocation?rq=1] –