我有与Spring Data JPA Framework的extends CrudRepository<T, T>不同的类。它隐式使用全局EntityManager bean。

现在,我想创建一个应该连接到其他数据库的服务。这意味着我必须以某种方式注入不同的em /数据源。但是如何将数据库显式绑定到spring bean /服务?

最佳答案

有多种实现方法。在我们的一个项目中,我们要做的是为不同的数据源定义两个不同的包,并为它们定义不同的bean,如下所示:

<beans>
    <jpa:repositories base-package="com.abc.repository" transaction-manager-ref="abcTransactionManager" entity-manager-factory-ref="abcEntityManagerFactory"/>

    <jpa:repositories base-package="com.def.repository" transaction-manager-ref="defTransactionManager" entity-manager-factory-ref="defEntityManagerFactory"/>

  <bean id="abcTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="abcEntityManagerFactory"/>
    <qualifier value="abcTransactionManager"></qualifier>
  </bean>

  <bean id="defTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="defEntityManagerFactory"/>
    <qualifier value="defTransactionManager"/>
  </bean>
</beans>


类似地定义相应的实体管理器工厂。这样,包abc中定义的任何存储库都将使用abcEntityManager,并且类似地使用def。

我看到它工作的另一种方式是使用适当的实体管理器来应用事务,如下所示:

 @Transactional("abcTransactionManager")

08-18 17:22
查看更多