由於條款你使用我是你使用Spring Batch
在批處理方面相當肯定你不能真正重新啓動已完成實例或執行。單個作業實例由作業參數標識。如果您需要使用相同參數再次運行作業,則有一種方法是在啓動之前包含一些唯一參數,例如JobParameters
的當前時間戳。
所以重啓完成的作業,將意味着開始一個新的實例,有着相近參數的工作。這裏有一個稍微修改的摘錄我已經使用了使用JobLauncher
和JobRegistry
之前的名字,推出一個新的工作:
@Autowired
@Qualifier("asyncJobLauncher")
private JobLauncher asyncJobLauncher;
@Autowired
private JobRegistry jobRegistry;
...
public JobExecution startJob(String jobName) {
Job job;
try {
job = jobRegistry.getJob(jobName);
} catch (NoSuchJobException e) {
// handle invalid job name
}
JobParametersBuilder jobParams = new JobParametersBuilder();
jobParams.addLong("currentTime", System.currentTimeMillis());
// add other relevant parameters
try {
JobExecution jobExecution = asyncJobLauncher.run(job, jobParams.toJobParameters());
return jobExecution;
} catch (JobExecutionAlreadyRunningException e) {
// handle instance already running with given params
} catch (Exception e) {
// handle other errors
}
}
希望它能幫助,這裏的一些reading這個話題。
嗨,非常感謝你的回答。我嘗試了上面的代碼,但不幸的是,jobRegistry.getJob(jobName)部分即使使用有效的作業名稱也會拋出異常。所以,我試圖看看該怎麼做。 –
你看到了什麼樣的例外?至少您需要確保JobRegistry和JobLauncher組件存在於應用程序上下文中。 – jp86
嘿,很抱歉回覆晚了。我的JobLauncher沒有正確配置,所以它運行不正常,但我現在正在工作,非常感謝您的幫助! –