我使用spring批處理文件。所有組件的配置都是以編程方式進行的。Spring批處理如何使用ItemReadListener
我有一個包含幾個TaskletSteps工作:
@Bean
@Named(SEEC_JOB)
public Job seecJob() {
return jobBuilderFactory.get(SEEC_JOB).start(seecMoveToWorkingStep()).next(seecLoadFileStep())
.on(ExitStatus.COMPLETED.getExitCode()).to(seecFlowMoveToArchiveOk()).from(seecLoadFileStep())
.on(ExitStatus.FAILED.getExitCode()).to(seecFlowMoveToArchiveKo()).end().build();
}
我的問題集中在seecLoadFileStep(),波紋管的細節:
@Bean
public TaskletStep seecLoadFileStep() {
TaskletStep build = stepBuilderFactory.get(SEEC_LOAD_FILE_STEP)
.<SeecMove, SeecMove>chunk(cormoranProperties.seec.batchSize.get()).reader(seecItemReader())
.writer(seecItemWriter()).build();
return build;
}
我想拋出一個特定的異常,如果閱讀錯誤歪曲(通過閱讀錯誤我的意思是:該文件是例如損壞或它是錯誤的,缺席xml標記...)。
我一直在閱讀Spring Batch的文檔,我覺得ItemReadListener是我的傢伙:
public interface ItemReadListener<T> extends StepListener {
void beforeRead();
void afterRead(T item);
void onReadError(Exception ex);
}
,但是,我不知道如何使用它!我試過做我的seecItemReader()實現這個接口,但onReadError方法永遠不會被調用。
我不知道如何聲明/註冊taskletStep ItemReadListener。
在這裏有點彈簧文檔的:
實現StepListener的延伸部中的一個(但 不是接口本身,因爲它是空的)的任何類可以通過偵聽元件被應用到步驟 。 listeners元素在 步驟,小程序或塊聲明中有效。建議您在其功能適用的級別聲明 ,或者如果它是 多功能(例如StepExecutionListener和ItemReadListener),則 將聲明它應用的最細化級別(在給定示例的 示例中聲明它) )。
一種ItemReader,ItemWriter或ItemProcessor中其本身實現StepListener接口之一 將自動與 如果使用名字空間元素,或所述 * StepFactoryBean工廠之一註冊的步驟。這僅適用於直接注入Step的組件:如果偵聽器嵌套在另一個 組件中,則需要顯式註冊它(如上所述)。
你能幫我嗎?
在此先感謝!
http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/step/builder/SimpleStepBuilder.html#listener(org.springframework.batch.core.ItemWriteListener)? –