Spring Batch 提交间隔配置不起作用
Posted
技术标签:
【中文标题】Spring Batch 提交间隔配置不起作用【英文标题】:Spring Batch commit-interval configuration not working 【发布时间】:2015-10-15 10:49:11 【问题描述】:我有一个使用 Spring Batch Input 阅读器 Writer 的简单程序。 该程序的目的是简单地读取一个 csv 文件。
我已将 commit-interval
设置为 5。csv 文件只有 5 条记录,但由于某种原因,尽管 commit-interval
设置为 5,但由于某种原因,Writer 被调用了 3 次。我原以为只会调用 writer曾经基于我的理解,项目阅读器和处理器将逐行读取每个项目,然后编写器将一次处理所有 5 个项目。我想我不清楚提交间隔的影响。有什么建议吗?
【问题讨论】:
我的问题的原因是我有一百万条记录,我可能必须使用 Java 集合读取并传递到下一步。现在,当我尝试从一个小文件中读取时,只有最后一个使用 StepExecution 将编号等于指定的 commit-linterval 的块传递到下一步。以前的记录没有通过。如何确保所有记录都通过。更改 commit-interval 有帮助吗?或者还有其他方法吗? 我正在为此使用 ExecutionContext 和 ExecutionContextPromotionListener。但只有等于提交间隔的最后一个块被设置并在下一步中读取。 请分享配置文件。我想知道您正在使用的reader
、writer
和processor
的类型。
当然。我们使用的阅读器是FlatFileItemReader。处理器是ItemProcessor,Writer是ItemWriter。这些是API提供的类。
请看看这个网站。它可能对你有帮助。 parameshk.blogspot.in/2013/11/…
【参考方案1】:
我认为你应该有类似的东西:
<job id="stepJob">
<step id="step1">
<tasklet>
<chunk reader="inputReader" writer="outputWriter" commit-interval="5"/>
</tasklet>
</step>
</job>
示例步骤的最后一部分是块标签,我们在其中定义了该步骤的块。示例中的 commit-interval 属性设置为 5,这意味着没有 记录将被写入,直到读取和处理 5 条记录。
【讨论】:
以上是关于Spring Batch 提交间隔配置不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch tasklet中的嵌套事务不起作用
Spring Boot 应用程序。批处理在 JpaRepository.saveAll 方法中不起作用
使用 Spring Boot 和 Spring Data JPA 批量插入不起作用