【发布时间】:2021-01-01 05:39:05
【问题描述】:
我在一个 Mongo 集群(4.4 版)中有两个数据库。 其中一个数据库是数据的暂存区,即临时存储在那里的数据,丰富的,验证的等。在某些时候,必须将数据复制到永久数据库并在临时数据库中标记为已复制。我想在一个事务中完成这些操作。
根据this blog post,使用 mongo 特定的代码应该很容易做到。 但是我的应用程序的其余部分是在 SpringData(来自 spring-data-mongodb-3.0.2.RELEASE.jar 的 MongoTemplate)之上编写的。所以我也想在这种情况下使用它。
可以在 Spring 配置中定义一个事务管理器 bean 并使用它:
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
但该 bean 将绑定到单个 Mongo 数据库(在 dbFactory 中指定),因此在实践中,事务将仅包含与一个 DB 相关的操作(而不是两者)。
我找到了一种方法来定义ChainedTransactionManager 并将两个 PlatformTransactionManagers 作为参数传递。但据我了解,它将创建两个事务,如果先前失败,将回滚剩余的事务。 这不是我想要的。
官方Spring data docs 不提供任何可与 MongoTemaplate 一起使用的本地跨数据库 Mongo 事务的信息。
所以我的问题是: 有没有办法定义一个支持多个 MongoDb 数据库的事务管理器(并允许在一个事务中修改两个数据库中的数据)?
【问题讨论】:
标签: spring mongodb transactions spring-data-mongodb spring-transactions