Java 如何为存储库设置特定的数据源?
是否可以将特定的Java 如何为存储库设置特定的数据源?,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,是否可以将特定的数据源分配给@存储库 我想创建一个测试环境,通常我想在其中使用测试数据源,但是一些crudepository应该在不同的数据库上操作(生产数据库;只读操作) 我可以告诉spring将哪个数据源用于显式存储库吗 public interface MyRepository extensed crudepository{}在声明EntityManager时,只需设置@PersistenceContext注释的name属性即可 @PersistenceContext(name="pers
数据源
分配给@存储库
我想创建一个测试环境,通常我想在其中使用测试数据源,但是一些crudepository
应该在不同的数据库上操作(生产数据库;只读操作)
我可以告诉spring将哪个数据源用于显式存储库吗
public interface MyRepository extensed crudepository{}
在声明EntityManager
时,只需设置@PersistenceContext
注释的name
属性即可
@PersistenceContext(name="persistence-unit-name")
private EntityManager em;
这取决于您的设计,因为您可以遵循不同的实现,例如,您可以为这两个数据源声明两个bean,并在代码中指定要命中的bean,或者,您可以定义两个不同的上下文和一个共享上下文,您必须在代码中再次指定要调用的服务。
下面是一个可能对您的第一种方法有所帮助的旧方法
@EnableJpaRepositories
是您问题的答案。根据非正式文件,这应适用于crudepository
有关如何执行此操作,请参阅本详细教程。我没有把我的努力张贴在这里的代码,因为你可以直接引用它更清楚
数据源和
JpaRepository
都绑定到一个实体管理器
。为了满足您的工作需求,您必须将存储库分离到单独的包中
以下是一个例子:
<bean id="emf1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource">
<bean .../>
</property>
...
</bean>
<jpa:repositories base-package="org.example.package1" entity-manager-factory-ref="emf1"/>
<bean id="emf2" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource">
<bean .../>
</property>
...
</bean>
<jpa:repositories base-package="org.example.package2" entity-manager-factory-ref="emf2"/>
...
...
看看这是否有效我觉得这是正确的答案,只是遗漏了一些重要的细节