gpt4 book ai didi

java - 如何计算 ItemReader 中的 stepReads 以使中间结果可用,即使步骤仍在运行?

转载 作者:行者123 更新时间:2023-11-30 08:42:02 24 4
gpt4 key购买 nike

我的 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 内部管理。任何想法我该怎么做?

附言

我无法修改 XML 批处理配置

最佳答案

你可以实现一个 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
}
}

将它添加到你的 block 中:

<batch:chunk>
<batch:listeners merge="true">
<batch:listener>
<bean class="xx.xx.xx.ItemReadCountListener" />
</batch:listener>
</batch:listeners>
</batch:chunk>

关于java - 如何计算 ItemReader 中的 stepReads 以使中间结果可用,即使步骤仍在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34730825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com