我有 2 个数据库(MySql 和 HSQLDB)。我配置了 2 个数据源和 2 个 EntityManagerFactory bean。我还可以配置 2 个对应的 JpaTransactionManager bean。
但我不知道如何指定它们中的哪一个应该用于管理具体服务类的事务。我想为此目的使用 @Transactional
注释,但实际上我只能指定一个 txManager:
<tx:annotation-driven transaction-manager="manager"/>
摆脱这种情况的出路是什么?
最佳答案
javadoc for JpaTransactionManager对此有一些建议:
This transaction manager is appropriate for applications that use a single JPA EntityManagerFactory for transactional data access. JTA (usually through JtaTransactionManager) is necessary for accessing multiple transactional resources within the same transaction. Note that you need to configure your JPA provider accordingly in order to make it participate in JTA transactions.
换句话说,如果您发现自己有多个实体管理器,以及相应的 tx 管理器,那么您应该考虑使用单个 JtaTransactionManager
反而。实体管理器应该能够参与 JTA 事务,这将为您提供跨两个实体管理器的完整事务性,而不必担心您在任何时候都在哪个实体管理器中。
当然,JtaTransactionManager
确实需要完全支持 JTA 的应用服务器,而不是像 Tomcat 这样的普通 servlet 引擎。
关于java - 如何配置事务管理以在 Spring 中使用 2 个不同的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961566/