当前位置: 首页 > 面试题库 >

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

顾永福
2023-03-14
问题内容

我有2个数据库(MySql和HSQLDB)。我配置了2个数据源和2个EntityManagerFactory
bean。我还可以配置2个对应的JpaTransactionManager bean。

但是我不知道如何指定应使用其中的哪一个来管理具体服务类的事务。我想为此使用@Transactional注释,但实际上我只能指定txManagers之一:

<tx:annotation-driven transaction-manager="manager"/>

这种情况下的出路是什么?


问题答案:

JpaTransactionManager的Javadoc对此有一些建议:

该事务管理器适用于使用单个JPA
EntityManagerFactory进行事务数据访问的应用程序。要访问同一事务中的多个事务资源,必须使用JTA(通常通过JtaTransactionManager)。请注意,您需要相应地配置JPA提供程序,以使其参与JTA事务。

换句话说,如果您发现自己拥有多个实体管理器和相应的TX管理器,则应该考虑使用一个实体管理器JtaTransactionManager。实体经理应该能够参与JTA事务,这将使您在两个实体经理之间都具有完全的交易能力,而不必担心您一次在哪个实体经理中。

当然,JtaTransactionManager确实需要完整的支持JTA的应用程序服务器,而不是像Tomcat这样的普通servlet引擎。



 类似资料:
  • 问题内容: 简而言之 我的命令行Java应用程序无需使用XA就可以将数据从一个数据源复制到另一个数据源。我已经配置了两个单独的数据源,并且想要一个可以在两个数据源上回滚数据的JUnit测试。我使用DBUnit将数据加载到“源”数据库中,但是无法将其回滚。我可以将“目标”数据源回滚。 我的密码 给定此配置… 和这段代码… 我所看到的问题是,@TransactionConfiguration仅说明了用

  • 我试图用不同的事务管理器嵌套事务,其中如果嵌套的事务失败,外部主事务也需要回滚 我的spring配置文件有 但是,当失败时,中的事务不会回滚。如何使回滚工作?

  • 我试图在我的应用程序中配置2个不同的数据源,因为它是必需的。

  • 我正在使用带有spring jdbc事务支持的spring jdbc。 这是我的配置。 使用这个配置,事务对我来说不起作用。我不确定原因,但我能理解的是- 如您所见,jdbcTemplate()和txManager(),这两个方法都调用getDataSource()方法,该方法inturn创建JDBCDataSource。我认为在这两个方法中,我都创建了两个jdbc数据源,因此jdbcTempla

  • 由于在所述实体不可用的情况下返回,因此需要进行如上所示的条件测试,以避免可能的,否则很可能发生。在任何地方重复这个琐碎的条件测试都是非常不可接受和不鼓励的,这使得业务逻辑应该尽可能简单,几乎不可读。 为了防止这种条件检查到处重复,我在一个单独的EJB中有一个通用方法, 从另一个EJB内部调用此方法,如下所示, 在这里,尽管所有事情都发生在同一个事务中,返回,即返回的实体由两个EJB中的管理。 虽然

  • null 如何使用Spring Batch配置JTA/XA事务(Atomikos)?