如何为存储库设置特定的数据源?

2022-09-02 02:03:56

是否可以将特定分配给 ?DataSource@Repository

我想创建一个测试环境,通常我想使用测试数据源,但有几个应该在不同的数据库(生产数据库;只读操作)上运行。CrudRepository

我能告诉春天哪个数据源用于显式存储库吗?

public interface MyRepository extends CrudRepository<Customer, Long> {}


答案 1

和 都与 .您必须将存储库隔离到单独的包中,才能满足您的要求。DataSourceJpaRepositoryEntityManager

下面是一个示例:

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

答案 2

好吧,这取决于你的设计,因为你可以遵循不同的实现,例如,你可以为两个数据源声明两个bean,并在你的代码中指定要命中哪一个,否则你可以定义两个不同的上下文和一个共享上下文,在其中你将不得不再次指定要调用的服务。这是一个较旧的问题,可能对您进行第一种方法有所帮助


推荐