如何正确安排这 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)
。
我正在开发 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)
。