2011-08-20 75 views
3

我還沒有找到關於此主題的問題,所以我會問。我從來沒有真正處理過使用多個數據源的東西。一個例子是ETL,它需要兩個數據源。如何設計這樣的應用程序?擁有多個數據源

+0

使用'@ EntityManager',你可以指定你想要一個實體管理器的數據源,但是我在這裏沒有看到具體的問題。 –

+0

對於ETL,需要同時使用兩個數據源。我發現這個[鏈接](http://forum.springsource.org/showthread.php?50123-JPA-with-multiple-persistence-units)並試圖理解它。我可以看到如何在Spring配置中定義兩個不同的EntityManagers,但是如何定義兩個持久性單元呢?我也可以想象源數據庫和目標數據庫的DAO是一樣的。有沒有辦法讓兩個DAO實例擁有同一個類中的自己的EM? –

回答

4

兩個數據源,兩個單獨的名稱。通過各自的bean ID注入每一個。

<bean id="fromDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${from.jdbc.driverClassName}"/> 
    <property name="url" value="${from.jdbc.url}"/> 
    <property name="username" value="${from.jdbc.username}"/> 
    <property name="password" value="${from.jdbc.password}"/> 
</bean> 

<context:property-placeholder location="from.jdbc.properties"/> 

<bean id="toDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${to.jdbc.driverClassName}"/> 
    <property name="url" value="${to.jdbc.url}"/> 
    <property name="username" value="${to.jdbc.username}"/> 
    <property name="password" value="${to.jdbc.password}"/> 
</bean> 

<context:property-placeholder location="to.jdbc.properties"/> 

你想要一個DAO,但它有兩個實例 - 每個實例都有自己的數據源。一個會從源選擇,另一個會插入目標。

一個更好的方法可能是放棄Spring,只使用內置於數據庫中的批量傳輸機制。

+0

謝謝duffymo。關於這兩個數據源,我如何定義不同的連接設置?我習慣於擁有一個persistence.xml。另外,在源數據庫和目標數據庫的結構幾乎相同的情況下,您是否會定義不同的DAO類? –