我正在開發 Spring Batch 應用程式,但在嘗試正確安排作業時遇到了一些困難。
我將嘗試詳細解釋我的問題。我在這門課上安排了我的作業:
/**
* 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());
}
}
}
正如您在我的runUpdateNotaryDistrictsJob()方法中看到的,我設定了這個 Spring CRON 運算式:
@Scheduled(cron = "0 */5 * * * *")
為了每 5 分鐘啟動一次我的updateNotaryDistrictsJob。
問題是,當我在除錯模式下運行我的應用程式時,我可以看到該作業立即執行(它在第一個斷點處停止)。似乎不是等待cron運算式設定的5分鐘。
為什么?怎么了?我該如何嘗試解決這個問題?
Tnx
uj5u.com熱心網友回復:
cron 運算式的0 */5 * * * *讀取方式與您預期的不同。“好像不是等cron運算式設定的5分鐘。”,這不是cron運算式定義的。cron 運算式將在第 0 秒運行,從每小時的第 0 分鐘開始,每 5 分鐘運行一次,這意味著它永遠不會在服務啟動后等待 5 分鐘。例如,如果您在 10:22 啟動它,它將在 10:25 運行。
如果你真的需要它在服務啟動后等待 5 分鐘,你應該考慮使用@Scheduled(fixedRate = 5000, initialDelay = 5000).
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329753.html
上一篇:Quartz集成測驗和事務
