Java Neo4j+;Postgres公共事务
我有一个Spring应用程序,它使用Neo4j图形数据库和Postgresql关系数据库。两个数据库都支持事务 我可以使用具有适当transactionManager属性的Spring@Transactional注释在每个数据库上分别处理事务 然而,我有很多方法同时在neo4j db和postgres db上处理数据。这样的操作应该是事务性的,所以我想“合并”这些单独的事务。我的意思是,如果smth在一个数据库引擎上失败,那么另一个数据库引擎也应该回滚自己的事务 是否有任何库或工具可以帮助我实现这一目标?还是我必须自己实施Java Neo4j+;Postgres公共事务,java,spring,postgresql,neo4j,transactions,Java,Spring,Postgresql,Neo4j,Transactions,我有一个Spring应用程序,它使用Neo4j图形数据库和Postgresql关系数据库。两个数据库都支持事务 我可以使用具有适当transactionManager属性的Spring@Transactional注释在每个数据库上分别处理事务 然而,我有很多方法同时在neo4j db和postgres db上处理数据。这样的操作应该是事务性的,所以我想“合并”这些单独的事务。我的意思是,如果smth在一个数据库引擎上失败,那么另一个数据库引擎也应该回滚自己的事务 是否有任何库或工具可以帮助我实现
提前谢谢 您可以像下面一样使用
ChainedTransactionManager
<bean id="transactionManager" class="com.springsource.open.db.ChainedTransactionManager">
<property name="transactionManagers">
<list>
<!-- Postgresql Transaction Manager -->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"/>
<!-- Neo4J Transaction Manager -->
<bean class="org.neo4j.ogm.session.transaction.TransactionManager"/>
</list>
</property>
</bean>
您不想自己实现这一点。该协议称为2PC(两阶段提交)。Postgresql支持它;Neo4j似乎也支持它。您只需要一些东西来协调两者之间的事务。Spring帮助您实现事务管理器这篇文章解释了如何使用Spring JtaTransactionManager:正如我从ChainedTransactionManager的描述中理解的,它没有实现2PC。在这种情况下,可以将事务提交到Postgresql,并回滚到Neo4J。这基本上是多资源事务的幼稚实现。它只是通过提供的TransactionManager循环处理事务。因此,无法保证在两个db引擎上都会进行提交。这不是正确的解决方案,但总比没有好。正如@Cristian Sevescu所说的,我们要做的是JtaTransactionManager。以下是如何在SpringBoot中使用它的一些信息: