gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:19:23 27 4
gpt4 key购买 nike

我有不同的类(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com