众所周知,spring batch从2.0版本开始就使用了面向chunk的处理。
这是否意味着,如果项目编写器中发生异常,数据源事务管理器将回滚整个块或仅回滚相关项目?
实际上,我试了一下,发现框架回滚了整个块。这不是我需要的,因为我不希望,比方说,当最后一个项目导致抛出异常时,已成功处理的 499 个项目在包含 500 个项目的块中回滚。
我能找到的唯一解决方案是将下面的属性添加到我的 tasklet 中。但是,我不确定这是否是正确的做法。
<batch:transaction-attributes propagation="NOT_SUPPORTED"/>
另一种意见是简单地将块大小减小到 1(一个),但那个也没有多大意义。
也许 Spring Batch 不适合我的问题域。如果是这样,请告诉我,这样我就不会再为那些特定于框架的行为而苦苦挣扎了。
任何建议将不胜感激。