有 Java 编程相关的问题?

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

java SchedulingConfigurer/CronTrigger正则表达式未按预期工作

我正在使用Spring SchedulingConfigurer和CronTrigger每5分钟触发一个作业,但代码没有按预期工作

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);
            }
        });
}

我遵循spring doc中提到的以下正则表达式规则
“0***”=每天每小时的顶部
/10*****”=每十秒一次
每天8点、9点和10点
每天早上6点和晚上7点
每天8:00、8:30、9:00、9:30、10:00和10:30
“0 0 9-17**MON-FRI”=在工作日的九到五个小时内
"0 0 0 25 12 ?" = 每个圣诞节的午夜

我在下面试过,但没有成功
How do you execute cron job every 5 minutes?
Create a regular expression for Cron statement
Create a regular expression for Cron statement


共 (1) 个答案

  1. # 1 楼答案

    最后,我在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);
                }
            });