是否可以将特定DataSource
分配给@Repository
?
我想创建一个测试环境,通常我想使用test-datasource,但是一些CrudRepository
应该在不同的DB上运行(生产数据库;只读操作)
我可以告诉spring用于存储库的数据源是显式的吗?
public interface MyRepository extends CrudRepository<Customer, Long> {}
答案 0 :(得分:3)
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"/>
答案 1 :(得分:1)
@EnableJpaRepositories
是您问题的答案。根据非正式文件,这应该与CrudRepository
一起使用。
请参阅此详细教程,了解如何执行此操作。我没有花时间在这里发布代码,因为你可以直接在其中更清楚地提及它。
答案 2 :(得分:0)
这取决于你的设计是什么,因为你可以遵循不同的实现,你可以为两个数据源声明两个bean,并在你的代码中指定你想要命中哪个,否则你可以定义两个不同的上下文和一个共享的上下文,您必须在代码中指定要调用的服务。 这是一个较旧的question,可能会帮助您实现第一种方法
答案 3 :(得分:-1)
尝试声明所需的数据源 @Bean
或明确声明为 @Primary
。
答案 4 :(得分:-2)
在声明name
时,只需设置@PersistenceContext
注释的EntityManager
属性。
@PersistenceContext(name="persistence-unit-name")
private EntityManager em;