Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为存储库设置特定的数据源?_Java_Spring_Spring Data Jpa - Fatal编程技术网

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"/>

...
...

看看这是否有效我觉得这是正确的答案,只是遗漏了一些重要的细节