【发布时间】:2021-05-31 04:29:05
【问题描述】:
我有一个带有两个数据库的 Spring Batch 应用程序:一个用于 Spring Batch 元数据的 SQL DB,另一个是存储所有业务数据的 MongoDB。关系数据库仍然使用DataSourceTransactionManager。
但是我不认为 Mongo 写入是在带有回滚的活动事务中完成的。这是MongoItemWriter上official Spring Batch documentation的摘录:
使用 Spring Data 的 MongoOperations 实现写入 MongoDB 存储的 ItemWriter 实现。由于 MongoDB 不是事务性存储,因此会尽最大努力在最后一刻持久化写入的数据,但仍遵守作业状态合同。如果写入过程中发生错误,则不会尝试回滚。
但是现在情况已经不同了; MongoDB introduced ACID transactions in version 4.
如何将事务添加到我的写入中?当我使用ItemWriterAdapter 时,我可以在我的服务方法上使用@Transactional。但是还是不知道怎么处理MongoItemWriter...这里的正确配置是什么?谢谢。
【问题讨论】:
标签: spring-batch