java - 如何配置事务管理以在 Spring 中使用 2 个不同的数据库?

标签 java spring jpa transactions multiple-databases

我有 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/

相关文章:

java - 结合整数和字符串参数的 JPA 标准谓词查询

java - 使用 Java EE 6 注释的 Servlet 过滤?

java - 项目的异常 Spring Hibernate Jndi Tomcat

java - 查找时的 Eclipselink NPE

java - Spring/Hibernate 和关系映射

java - 数据库和 Web 应用程序之间的日期不一致

java - 如何在生产环境中为 hibernate.hbm2ddl.auto 使用不同的值

java - Tomcat webapp ClassLoader 不适用于运行时编译

java - 奇怪的 JAX-RS 行为

java - 创建类似于MouseListener的Listener