如何使用多个cron设置计划以使用spring boot执行一项任务

时间:2017-04-24 03:49:47

标签: java spring-boot cron schedule

现在我已经实现了一个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表达式执行一个任务,而我需要设置一个带有多个玉米表达式的计划来完成一个任务,我该怎么办?

1 个答案:

答案 0 :(得分:0)

创建一个单独的(bean)类来执行cron任务。我的意思是把你在run方法中的代码片段放到另一个类

@Component
public class CronJobTask {

  public void executeCron(){
      System.out.println("Cron triggered");
     //TODO MyTask
  }
}

然后创建两个类,如上面的DynamicScheduledTask1DynamicScheduledTask2。在这两个类中,将依赖项添加到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");