现在我已经实现了一个SchedulingConfigurer类来实现动态调度任务,如下面的代码。
@Component
public class DynamicScheduledTask implements SchedulingConfigurer {
private static final String DEFAULT_CRON = "* * * * * ?";
private String cron = DEFAULT_CRON;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
//TODO MyTask
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
CronTrigger trigger = new CronTrigger(cron);
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
}
});
}
public void setCron(String cron) {
this.cron = cron;
}
}
但是上面的代码只用一个cron表达式执行一个任务,而我需要设置一个带有多个玉米表达式的计划来完成一个任务,我该怎么办?
答案 0 :(得分:0)
创建一个单独的(bean)类来执行cron任务。我的意思是把你在run方法中的代码片段放到另一个类
中@Component
public class CronJobTask {
public void executeCron(){
System.out.println("Cron triggered");
//TODO MyTask
}
}
然后创建两个类,如上面的DynamicScheduledTask1
和DynamicScheduledTask2
。在这两个类中,将依赖项添加到CronJobTask
@Autowired
CronJobTask cronJobTask;
并从两个类中的run方法中调用
cronJobtask.executeCron();
让我们假设您从用户那里得到休息时间。因此,在您的控制器类中,将依赖项添加到DynamicScheduledTasks
@Autowired
DynamicScheduledTask1 dynamicScheduledTask1;
@Autowired
DynamicScheduledTask2 dynamicScheduledTask2;
所以当你从用户那里得到时间时。计算cron次数并做
dynamicScheduledTask1.setCron("calculated cron 1");
dynamicScheduledTask2.setCron("calculated cron 2");