2015-04-01 98 views
5

是否可以将特定的DataSource分配给@Repository如何为存储库设置特定的数据源?

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

我可以告诉spring哪个数据源明确地用于存储库吗?

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

+0

看看这将工作http://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html# howto-use-two-entity-managers – 2015-04-01 18:28:37

回答

0

@EnableJpaRepositories是你的问题的答案。根据非正式文件,这应与CrudRepository一起使用。

请参阅这个详细教程如何做到这一点。我没有付出努力在这里发布代码,因为您可以直接将其更加清晰地表达出来。

link to the Tutorial...

-1

声明你EntityManager时,只需设置@PersistenceContext注释的name属性。

@PersistenceContext(name="persistence-unit-name") 
private EntityManager em; 
+0

我依靠'CrudRepository',因此不能自己注入EM ... – membersound 2015-04-01 18:10:30

0

以及这取决于哪个是你的设计,原因有,你可以遵循,FE可以声明两个bean两个数据源,并在代码中指定你想打哪一个,或者不同的实现否则你可以定义两个不同的上下文和一个共享上下文,在这个上下文中你必须在你的代码中指定你想要调用的服务。 这里是一个较旧的question,可能会帮助你的第一种方法

2

DataSourceJpaRepository都绑定到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"/> 
相关问题