我每5分钟使用SchedulingConfigurer和CronTrigger来触发一个作业,但是代码并不像预期的那样工作。
import java.util.Date;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {
@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Scheduler task is running: " + java.time.LocalDateTime.now());
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
CronTrigger trigger = new CronTrigger("* */5 * * * *");
return trigger.nextExecutionTime(triggerContext);
}
});
}
我遵循下面的regex规则,如spring .中所提到的。
"0 ***“=每天每小时的顶部。
"/10 ** *“=每10秒一次。
"0 0 8-10 * *“=每天8、9及10点钟。
"0 0 6,19 ** *“=每天早上6:00和下午7:00。
" 0 /30 8-10 ** *“=每天8:00、8:30、9:00、9:30、10:00和10:30。
"0 0 9-17 **星期一至五“=每周9至5小时
"0 0 0 25 12 ?“=每个圣诞节午夜
我试过了,但没有运气。
发布于 2021-08-09 15:47:35
最后,在CronMaker的帮助下,我得到了解决方案。
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Scheduler task is running: " + java.time.LocalDateTime.now());
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
CronTrigger trigger = new CronTrigger("0 0/5 * 1/1 * ?");
return trigger.nextExecutionTime(triggerContext);
}
});
https://stackoverflow.com/questions/68711988
复制相似问题