如何为存储库设置特定的数据源?
How to set a specific DataSource for a Repository?
是否可以将特定的 DataSource
分配给 @Repository
?
我想创建一个测试环境,通常我想在其中使用测试数据源,但一些 CrudRepository
应该在不同的数据库(生产数据库;只读操作)上运行.
我可以明确地告诉 spring 哪个数据源用于存储库吗?
public interface MyRepository extends CrudRepository<Customer, Long> {}
只需在声明 EntityManager
时设置 @PersistenceContext
注释的 name
属性即可。
@PersistenceContext(name="persistence-unit-name")
private EntityManager em;
好吧,这取决于您的设计,因为您可以遵循不同的实现方式,f.e您可以为两个数据源声明两个 bean,并在您的代码中指定要命中的那个,否则您可以定义两个不同的上下文和一个共享上下文,您必须在代码中再次指定要调用的服务。
这是一个较旧的 question,可能对您的第一种方法有帮助
@EnableJpaRepositories
是您问题的答案。根据非正式文档,这应该与 CrudRepository
一起使用。
请参阅此详细教程了解如何执行此操作。我没有把精力放在post这里的代码上,因为你可以直接在里面引用它更清楚。
DataSource
和 JpaRepository
都绑定到 EntityManager
。您必须将存储库隔离到单独的包中才能满足您的工作要求。
这是一个例子:
<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"/>
尝试声明所需的数据源 @Bean
或明确声明为 @Primary
。
是否可以将特定的 DataSource
分配给 @Repository
?
我想创建一个测试环境,通常我想在其中使用测试数据源,但一些 CrudRepository
应该在不同的数据库(生产数据库;只读操作)上运行.
我可以明确地告诉 spring 哪个数据源用于存储库吗?
public interface MyRepository extends CrudRepository<Customer, Long> {}
只需在声明 EntityManager
时设置 @PersistenceContext
注释的 name
属性即可。
@PersistenceContext(name="persistence-unit-name")
private EntityManager em;
好吧,这取决于您的设计,因为您可以遵循不同的实现方式,f.e您可以为两个数据源声明两个 bean,并在您的代码中指定要命中的那个,否则您可以定义两个不同的上下文和一个共享上下文,您必须在代码中再次指定要调用的服务。 这是一个较旧的 question,可能对您的第一种方法有帮助
@EnableJpaRepositories
是您问题的答案。根据非正式文档,这应该与 CrudRepository
一起使用。
请参阅此详细教程了解如何执行此操作。我没有把精力放在post这里的代码上,因为你可以直接在里面引用它更清楚。
DataSource
和 JpaRepository
都绑定到 EntityManager
。您必须将存储库隔离到单独的包中才能满足您的工作要求。
这是一个例子:
<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"/>
尝试声明所需的数据源 @Bean
或明确声明为 @Primary
。