一般StepExecutionListener
を作成したいと思います。それはTasklet
ステップで処理されたアイテム数を記録する必要があります。春バッチタスクレットでアイテム数を更新するにはどうすればよいですか?
問題:カウントは自動的には更新されません。だから私はおそらくTasklet.execute()
のどこかでこれをしなければならないでしょう。しかしどうですか?
@Bean
@JobScope
public Tasklet myTasklet() {
return new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
int count = dao.deleteByName(name);
//TODO how to set the count into the stepExecution context?
return RepeatStatus.FINISHED;
}
};
}
@Bean
public Step myStep() {
return getStepBuilderFactory().get("myStep")
.listener(new StepListener())
.tasklet(myTasklet())
.build();
}
public class StepListener extends StepExecutionListenerSupport {
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
long items = stepExecution.getWriteCount();
logger.info("items processed in tasklet: " + items);
return super.afterStep(stepExecution);
}
}
'stepExecution.getWriteCount()'は自動的に更新されません。それはあなたにどんな結果をもたらしますか? – Asoub
タスクレット内で何個のアイテムを処理しても、「0」を返します。もちろん、これは、タスクレットから春のバッチ処理に返される項目数や何もないという事実によるものです。 – membersound