Java 如何使用多个cron设置一个时间表,以便使用springboot执行一个任务
现在,我已经实现了一个SchedulingConfigurer类来实现动态调度任务,如下代码所示Java 如何使用多个cron设置一个时间表,以便使用springboot执行一个任务,java,spring-boot,cron,schedule,Java,Spring Boot,Cron,Schedule,现在,我已经实现了一个SchedulingConfigurer类来实现动态调度任务,如下代码所示 @Component public class DynamicScheduledTask implements SchedulingConfigurer { private static final String DEFAULT_CRON = "* * * * * ?"; private String cron = DEFAULT_CRON; @Override p
@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)类来执行cron任务。我的意思是把你在run方法中的任何一段代码放到另一个类中
@Component
public class CronJobTask {
public void executeCron(){
System.out.println("Cron triggered");
//TODO MyTask
}
}
然后创建两个类,与上面的DynamicScheduledTask1
和DynamicScheduledTask2
类似。在这两个类中,向cronjobstask添加依赖项
@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");
创建一个单独的(bean)类来执行cron任务。我的意思是把你在run方法中的任何一段代码放到另一个类中
@Component
public class CronJobTask {
public void executeCron(){
System.out.println("Cron triggered");
//TODO MyTask
}
}
然后创建两个类,与上面的DynamicScheduledTask1
和DynamicScheduledTask2
类似。在这两个类中,向cronjobstask添加依赖项
@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");
您好,您为什么不使用@Scheduled()?因为我需要在服务器运行时设置一个时间来调度任务。1。您是否已使用@EnableScheduling批注启用计划。2.如果应用程序未运行,则计划的任务无论如何都不会运行。所以对于您的用例,您可以使用@Scheduled(cron=“****?”)来安排任务。是的,我已经做了您之前所说的。我可以理解您的意思,但我需要设置一个时间,即用户请求从网站到运行时安排的时间,而@Scheduled(cron=“****?”)是接受固定时间(固定cron表达式).因此,我将代码作为我的问题,它正在工作,但现在我有一个问题,我的代码只接受一个corn表达式,我想要的是,您有什么解决方案吗?两个cron表达式是否都来自用户?或者一个cron来自用户,而您正在基于此计算另一个cron?您好,您为什么不使用@Scheduled()?因为我需要设置一个时间,以便在服务器运行时安排任务。1。您是否已使用@EnableScheduling批注启用计划。2.如果应用程序未运行,则计划的任务无论如何都不会运行。所以对于您的用例,您可以使用@Scheduled(cron=“****?”)来安排任务。是的,我已经做了您之前所说的。我可以理解您的意思,但我需要设置一个时间,即用户请求从网站到运行时安排的时间,而@Scheduled(cron=“****?”)是接受固定时间(固定cron表达式).因此,我将代码作为我的问题,它正在工作,但现在我有一个问题,我的代码只接受一个corn表达式,我想要的是,您有什么解决方案吗?两个cron表达式是否都来自用户?或者一个cron来自用户,而您正基于此计算另一个cron?谢谢你,我终于得到了我想要的。谢谢你,我终于得到了我想要的。