java - Spring Batch - 处理器步骤期间的事务性 REQUIRES_NEW
问题描述
我在批处理块处理的处理器步骤期间使用 @Transactional(propagation = Propagation.REQUIRES_NEW) 时遇到问题。
我试图实现的是在处理器步骤中保留自定义数据:
public class AbstractImportRecordProcessor implements InitializingBean, ImportContextAware,
ItemProcessor<ImportRecord, BatchReportBasket> {
@Autowired
private TransactionBasketService transactionBasketService;
@Override
public final BatchReportBasket process(final ImportRecord item) {
...
transactionBasketService.save(transactionBasket);
...
}
}
和服务实现:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void save(final TransactionBasket transactionBasket) {
}
如果我不添加@Transactional,则由于回滚,数据不会保留在异常中。
如果我使用@Transactional,则基本处理的异常处理似乎被破坏了。如果发生异常,则不会像以前那样处理。
所以不知何故,@Transactional 对块事务处理和异常处理有影响。从我的角度来看,这不应该发生。
任何想法为什么会发生这种情况?
编辑:关于我们为什么需要这个的更多信息
我们处理进口记录并将其发送给作者。在我们的流程中,我们每天都会获得 90% 的相同“数据”。因此,我们需要保存上次运行期间已经处理过的数据。如果我们在处理器中知道我们已经处理了数据,我们可以跳过它而不将它发送给作者。为此,我们要将数据的主键保存到专用的数据库表中。无论编写器中是否有任何异常,此信息都应该是持久的。
如果我们把它放到一个监听器中,我们已经完成了处理并且不能做这样的事情。
提前感谢您的意见。
解决方案
推荐阅读
- python - 正则表达式子忽略字符串字符的结尾
- r - 使用 R 中 stats 包中的 group_by 和平滑函数对分组数据进行平滑处理
- vb.net - 我做错了什么这里'ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态是关闭的。'? 我使用 Access 2016
- pydub - pydub AudioSegment.from_file Filenofounderror
- android - 如何在现有 Sqlite DB 中添加新表
- reactjs - 为什么这个 React 路由器 NavLink 要么重定向要么成功提交,但不能同时提交?
- sql - 将 Excel 表格数据与 postgres DB 同步
- influxdb - 如何在 influxDB 中删除重复测量
- python - 计算 groupby 中的 nanmean 并根据子组将此均值应用于 DF 列
- django - Django 模板只出现第一个循环