有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用多个cron设置时间表,以便在spring boot中执行一项任务

现在我已经实现了一个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表达式设置一个时间表来执行一个任务,我应该怎么做


共 (1) 个答案

  1. # 1 楼答案

    创建一个单独的(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();  
    

    假设您通过rest调用从用户那里获得时间。因此,在控制器类中,向两个DynamicScheduledTask添加依赖项

    @Autowired
    DynamicScheduledTask1 dynamicScheduledTask1;
    @Autowired
    DynamicScheduledTask2 dynamicScheduledTask2;  
    

    所以当你从用户那里得到时间。计算cron时间并执行以下操作:

    dynamicScheduledTask1.setCron("calculated cron 1");
    dynamicScheduledTask2.setCron("calculated cron 2");