【发布时间】:2016-06-22 17:56:37
【问题描述】:
在我的特定场景中,我必须将从文件读取的大量实体持久保存到数据库中,但我的提交间隔配置为 value = 1。此外,我不太确定使用的CompositeItemProcessor 中的委托处理器是否是幂等的。所以我的问题是,是否有办法防止浪费时间重新处理并避免对数据库进行许多未使用的查询。我还想使用 SkipListener 将读取/处理/写入的错误记录到特定表中,并怀疑此类配置(无重新处理)不符合此要求。
我正在使用 Spring Batch 2.1.9。
提前致谢。
____________________________2016 年 7 月 5 日更新 ____________________________
经过几天的研究,我意识到一些用户和 Spring 开发人员之间存在概念上的争论。
我现在知道,正如@MichaelMinella 在此2014 post 答案的评论中所说,这种行为是在编写阶段抛出的跳过异常上设计的:
ItemWriter#write方法接收项目列表。不用去 通过它们一次一个,我们无法确定哪个 列表中的异常在 writer 中抛出。
所以框架还没有办法在不扫描整个列表的情况下发现失败的项目(即使块大小为 1)。执行此操作的框架的内部行为使用FaultTolerantChunkProcessor 和RetryTemplate 在this 2013 post 中进行了描述,有关此问题的更多讨论可以在此spring batch forum 2012 post 上找到。
【问题讨论】:
标签: transactions spring-batch skip spring-retry