2015-04-01 7 views
5

È possibile assegnare uno specifico DataSource a @Repository?Come impostare un DataSource specifico per un repository?

Vorrei creare un ambiente di test in cui, in generale, desidero utilizzare l'origine dati di test, ma alcuni CrudRepository devono funzionare su un DB diverso (il DB di produzione, operazioni di sola lettura).

Posso dire a primavera quale origine dati utilizzare per un repository esplicito?

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

+0

vedere se questo funzionerà http://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html# howto-use-two-entity-managers –

risposta

0

@EnableJpaRepositories è la risposta alla tua domanda. Questo dovrebbe funzionare con CrudRepository secondo le documentazioni informali.

Fare riferimento a questo tutorial dettagliato su come eseguire questa operazione. Non mi sono sforzato di postare i codici qui perché potresti riferirti in modo molto più chiaro.

link to the Tutorial...

-1

Basta impostare l'attributo name del @PersistenceContext annotazioni quando dichiara il vostro EntityManager.

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

Mi affido a 'CrudRepository', quindi non sto iniettando il ME stesso ... – membersound

0

Beh, dipende da quale è il vostro disegno, perche 'ci sono diverse implementazioni che si possono seguire, fe è possibile dichiarare due chicchi per le due origini dati e nel codice specificare a quale si vuole colpire, o altrimenti è possibile definire due differenti contesti e un contesto condiviso in cui si dovrà specificare nuovamente nel codice quale servizio si desidera chiamare. Ecco un vecchio question che potrebbe aiutarti per il primo approccio

2

Il DataSource e JpaRepository sono entrambi legati a un EntityManager. Dovrai separare i repository in pacchetti separati per il tuo requisito di lavoro.

Ecco un esempio:

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