gpt4 book ai didi

java - Spring Batch 提交间隔不起作用并且工作行为很奇怪

转载 作者:行者123 更新时间:2023-12-01 09:38:22 24 4
gpt4 key购买 nike

我的工作行为很奇怪,无法理解为什么会发生这种情况。我有以下 spring 批处理配置:

<beans:bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<beans:property name="corePoolSize" value="50"/>
<beans:property name="maxPoolSize" value="100"/>
<beans:property name="queueCapacity" value="100"/>
</beans:bean>



<job id="creationFlowSaveJob">
<step id="creationFlowCampaignSaveStep">
<tasklet task-executor="taskExecutor"
throttle-limit="5">
<chunk
reader="creationFlowCampaignSaveReader"
processor="creationFlowCampaignSaveProcessor"
writer="creationFlowCampaignSaveWriter"
commit-interval="100"
>
</chunk>
</tasklet>
<listeners>
<listener ref="generalStepLogger"/>
</listeners>
</step>
</job>

所以我采取了throttle-limit = 5和commit-interval =“100”的步骤,并且我假设编写器将收到要写入的100个项目的 block ,并且所有 block 都将被一一处理。

但我有以下流程:

如果作业流程中有 4 个项目,那么我会看到 writer 收到 1 个项目并调用 4 次,而不是单次调用 4 个项目。除此之外,所有这 4 个调用都是并发执行的,即同时执行,这很奇怪。

另一个奇怪的事情是,如果我从 tasklet 配置中删除任务执行器,那么作业就会开始像预期的那样运行。如果项目数量很大并且我没有并发的写入器调用,则写入写入器的文件 block 为 4 个或 100 个。

有人可以解释为什么会发生这种情况吗?为什么taskExecutor以这种奇怪的方式改变作业流程以及taskExecutor在作业中的目的是什么?

请帮助理解这一点,谢谢

最佳答案

使用任务执行器和 throttle 限制,您可以声明多线程步骤。所以你有 5 个并发读写的线程。如果不需要,请从步骤声明中删除任务执行器和限制限制。
另外,如果您使用多线程,您应该使用线程安全的 ItemReader 和 ItemWriter

关于java - Spring Batch 提交间隔不起作用并且工作行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652160/

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