java - 如何将 Spring 服务委托(delegate)给不同的数据库?

标签 java spring spring-data spring-data-jpa

我有不同的类(class) extends CrudRepository<T, T> Spring Data JPA 框架。它隐式使用全局 EntityManager bean 。

现在我想创建一个连接到不同数据库的服务。这意味着我必须以某种方式注入(inject)不同的 em/datasource。但是如何将数据库显式绑定(bind)到 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>

同样定义对应的entity manager factory。这样,包 abc 中定义的任何存储库都将使用 abcEntityManager 并且类似地用于 def。

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

 @Transactional("abcTransactionManager")

关于java - 如何将 Spring 服务委托(delegate)给不同的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262360/

相关文章:

java - 为什么递归调用打印 '123456' 而不是 '1' ?

java - NoSuchMethodException JacksonObjectMapperBuilderConfiguration

spring - Spring Data REST 的 QueryDSL 集成可以用来执行更复杂的查询吗?

java - 为 spring-data-neo4j-4 中的继承节点添加第二个标签

java - 如何从 Robotium 检查我的 png 是否出现在屏幕上?

java - 继承泛型接口(interface)的子类

java - 如何从可运行的可调用对象中获取类名

java - 使用 Spring 访问共享配置对象

java - MongoDB 4.0 和 Spring Data 中的事务

java - Facebook Messenger - 气泡弹出窗口