如何使用多个 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,就像上面 DynamicScheduledTask1DynamicScheduledTask2 一样。在 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");