我的XML步骤声明
<step id="MongoDbLoadDataStep" next="checkStatusStep">
<tasklet>
<chunk reader="MongoReader" writer="MongoWriter" commit-interval="5"/>
</tasklet>
</step>
一个阅读器只有一个方法read
,没有机会增加读取计数器或访问Spring StepContribution
实例。所以我需要找到一种方法,如何提供一种机制,可以让我增加步读计数器。在Tasklet
我们有非常方便的方法:
RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)
但是在XML中只有默认的Tasklet由Spring内部管理。任何想法我该怎么做?
PS 的
我无法修改XML批处理配置
答案 0 :(得分:2)
每次读取后,您都可以实现ItemReadListener来递增计数器。还有一个StepExecutionListener将结果存储在上下文中(省略了空方法):
public class ItemReadCountListener implements ItemReadListener<T>, StepExecutionListener {
private Integer count = 0;
@Override
public void afterRead(T item) {
count++; // Increment counter
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
stepExecution.getJobExecution().getExecutionContext().put("ITEM_READ_COUNT", count); // Store counter
}
}
将其添加到您的块中:
<batch:chunk>
<batch:listeners merge="true">
<batch:listener>
<bean class="xx.xx.xx.ItemReadCountListener" />
</batch:listener>
</batch:listeners>
</batch:chunk>