如何正确安排这 5 分钟 Spring 批处理作业?为什么是立即开始而不是等待设定的时间?

How to correctly schedule this 5 minutes Spring Batch Job? Why is it starting immediatly instead of waiting for the set time?

我正在开发 Spring 批处理应用程序,但我发现在尝试正确安排作业时遇到了一些困难。

我有这个 class 我的工作安排位置:

/**
 * This bean schedules and runs our Spring Batch job.
 */
@Component
@Profile("!test")
public class SpringBatchExampleJobLauncher {

    private static final Logger LOGGER = LoggerFactory.getLogger(SpringBatchExampleJobLauncher.class);

    @Autowired
    @Qualifier("launcher")
    private JobLauncher jobLauncher;
    
    @Autowired
    @Qualifier("updateNotaryDistrictsJob")
    private Job updateNotaryDistrictsJob;

    @Autowired
    @Qualifier("updateNotaryListInfoJob")
    private Job updateNotaryListInfoJob;
    
    @Scheduled(cron = "0 */5 * * * *")
    public void runUpdateNotaryDistrictsJob() {
        LOGGER.info("SCHEDULED run of updateNotaryDistrictsJob STARTED");
        Map<String, JobParameter> confMap = new HashMap<>();
        confMap.put("time", new JobParameter(System.currentTimeMillis()));
        JobParameters jobParameters = new JobParameters(confMap);
        try {
            jobLauncher.run(updateNotaryDistrictsJob, jobParameters);
        }catch (Exception ex){
            LOGGER.error(ex.getMessage());
        }

    }
    
}

正如您在我的 运行UpdateNotaryDistrictsJob() 方法中所见,我设置了这个 Spring CRON 表达式:

@Scheduled(cron = "0 */5 * * * *")

为了每 5 分钟启动我的 updateNotaryDistrictsJob

问题是,当我 运行 我的应用程序处于调试模式时,我可以看到作业立即执行(它在第一个断点处停止)。好像不是在等待cron表达式设置的5分钟。

怎么了?我该如何尝试解决这个问题?

cron 表达式 0 */5 * * * * 未按预期读取。 “好像没有等待cron表达式设置的5分钟。”,这不是cron表达式定义的。 cron 表达式将 运行 在第 0 秒,从第 0 分钟开始每 5 分钟,每小时,这意味着它永远不会在服务启动后等待 5 分钟。例如,如果您在 10:22 开始它,它将在 10:25 时 运行。

如果您确实需要在服务启动后等待5分钟,您应该考虑使用@Scheduled(fixedRate = 5000, initialDelay = 5000)