我一直在試圖解決這個問題幾天,我無法做到。我對Spring 4很新,所以也許有經驗的人可以告訴我如何去做。使Spring 4批處理服務可重複執行計劃執行
我想了解如何使用最新版本的框架編寫Spring Batch。我按照入門教程: https://spring.io/guides/gs/batch-processing/
一旦作業執行,我想讓它定期執行。因此,我去了一個計劃任務: https://spring.io/guides/gs/scheduling-tasks/
看起來很容易把兩個想法放在一起。實際上,這是不可能的。 我讀了一點,我添加了一些代碼,使jobExecution每次都是唯一的。儘管如此,編碼步驟一旦完成,就再也不會執行了。
我調查了一下,我已經閱讀了有關RepeatTemplate,但我沒有看清楚如何使它適合我的代碼。在這裏你有3個相關的執行方法:
@Scheduled(cron="0 0/2 * * * ?")
public void run() throws Exception {
System.out.println("Job Started at :" + new Date());
JobParameters param = new JobParametersBuilder().addString("newsSyncJob",
String.valueOf(System.currentTimeMillis())).toJobParameters();
NewsJobCompletionListener listener = new NewsJobCompletionListener();
JobExecution execution = jobLauncher.run(newsSyncJob(listener), param);
System.out.println("Job finished with status :" + execution.getStatus());
}
/**
* Execution of the job
* @param listener
* @return
*/
@Bean
public Job newsSyncJob(NewsJobCompletionListener listener) {
log.debug("newsSyncJob execution started");
this.init();
return jobBuilderFactory.get("newsSyncJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1())
.end()
.build();
}
@Bean
protected Step step1() {
return stepBuilderFactory.get("step1")
.<NewsSync, NewsSync> chunk(4)
.reader(filesReader()).
processor(newsProcessor()).
writer(stateWriter()).
build();
}
任何想法如何使步驟重新執行成功? 提前謝謝!
對於初學者,您的設置存在缺陷。每次你想執行它時,你都不應該創建一個新的Job實例。另外你的意思是不重新執行?我也懷疑你需要/想'流',但你應該有'開始',而不是。 –
感謝@ M.Deinum給你評論。我按照你的建議替換了Job的設置 - 'start(...)'而不是'flow(...)',我不得不擺脫'end()'。 不過,作業只執行一次。 這意味着run()方法每2分鐘執行一次(如cron表達式所示)。這裏都很好。問題來到...... 'jobLauncher.run(newsSyncJob(listener),param)' ...因爲'newsSyncJob(...)'不再被調用。這是正常的嗎? 對於'newsSyncJob()','step1()'或任何itemReader,處理器或寫入器,不會有斷點停止。 –