2011-08-20 74 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类? –