SpringData事务管理器支持MongoDB多数据库事务



我在一个Mongo集群(版本4.4(中有两个数据库。其中一个数据库是数据的暂存区,即存储在那里的临时、丰富、验证等数据。在某个时刻,数据必须复制到永久数据库,并标记为复制到临时数据库中。我想在一个事务中执行这些操作。

根据这篇博客文章,使用mongo特定的代码应该很容易做到。但是我的应用程序的其余部分是在SpringData(来自spring-data-mongodb-3.0.2.REASE.jar的MongoTemplate(之上编写的。所以我也想在这种情况下使用它。

可以在Spring配置中定义事务管理器bean并使用它:

@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}

但该bean将绑定到单个Mongo数据库(在dbFactory中指定(,因此在实践中,事务将只包含与一个数据库相关的操作(而不是同时包含这两个数据库(。

我找到了一种定义ChainedTransactionManager的方法,并将两个PlatformTransactionManager作为参数传递。但据我所知,它将创建两个事务,并在前一个失败的情况下回滚剩余的事务。这不是我想要的。

Spring的官方数据文档没有提供任何关于可以与MongoTemaplate一起使用的本地跨数据库Mongo事务的信息。

所以我的问题是:有没有办法定义一个支持多个MongoDb数据库的事务管理器(并允许在一个事务中修改两个数据库中的数据(

实现这一点的一种潜在方法是在处理代码之外建立事务(使用withTransaction驱动程序助手(,它为您提供了一个会话对象,并让所有处理代码引用事务的会话。然后,您的处理代码只需要使用会话,但不需要担心事务,它可以与其他组件一起成为事务的一部分。

不过,我不知道如何具体处理春季数据。

最新更新