2015-04-01 96 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"/> 
相關問題