如何使用多个 cron 设置时间表以使用 spring 启动来完成一项任务
How to set a schedule with multiple cron to do one task with spring boot
现在我实现了一个 class 的 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表达式做一个任务,而我需要设置一个包含多个corn表达式的时间表来完成一个任务,我该怎么办?
创建一个单独的(bean)class 来执行您的 cron 任务。我的意思是将 运行 方法中的任何代码放入另一个 class
@Component
public class CronJobTask {
public void executeCron(){
System.out.println("Cron triggered");
//TODO MyTask
}
}
然后创建两个 class,就像上面 DynamicScheduledTask1
和 DynamicScheduledTask2
一样。在 classes 中添加对 CronJobTask 的依赖
@Autowired
CronJobTask cronJobTask;
并且从 class 中的 运行 方法调用
cronJobtask.executeCron();
并假设您通过休息电话从用户那里获得时间。因此,在您的控制器中 class 将依赖项添加到 DynamicScheduledTasks
@Autowired
DynamicScheduledTask1 dynamicScheduledTask1;
@Autowired
DynamicScheduledTask2 dynamicScheduledTask2;
所以当你从用户那里得到时间。计算 cron 时间并执行
dynamicScheduledTask1.setCron("calculated cron 1");
dynamicScheduledTask2.setCron("calculated cron 2");
现在我实现了一个 class 的 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表达式做一个任务,而我需要设置一个包含多个corn表达式的时间表来完成一个任务,我该怎么办?
创建一个单独的(bean)class 来执行您的 cron 任务。我的意思是将 运行 方法中的任何代码放入另一个 class
@Component
public class CronJobTask {
public void executeCron(){
System.out.println("Cron triggered");
//TODO MyTask
}
}
然后创建两个 class,就像上面 DynamicScheduledTask1
和 DynamicScheduledTask2
一样。在 classes 中添加对 CronJobTask 的依赖
@Autowired
CronJobTask cronJobTask;
并且从 class 中的 运行 方法调用
cronJobtask.executeCron();
并假设您通过休息电话从用户那里获得时间。因此,在您的控制器中 class 将依赖项添加到 DynamicScheduledTasks
@Autowired
DynamicScheduledTask1 dynamicScheduledTask1;
@Autowired
DynamicScheduledTask2 dynamicScheduledTask2;
所以当你从用户那里得到时间。计算 cron 时间并执行
dynamicScheduledTask1.setCron("calculated cron 1");
dynamicScheduledTask2.setCron("calculated cron 2");