2013-01-06 71 views
4

我在某個時候以編程的方式完成了這項工作 - 即創建兩個具有不同數據源的實體管理器併爲不同的服務提供它們。Spring中的兩個實體管理器

但是現在我正在使用Spring構建webApp。事情是我想讓兩個實體經理負責分開的數據庫。所以在我的情況下,DAO的一半將使用emNumber1,而下半年將使用emNumber2。哦,完全不同的持久性單元,因爲我只需要從DB1讀取數據,然後對其進行處理,並將這些數據存儲在DB2中完全不同的實體中。

我很清楚,這個問題現在已經存在了一段時間,但形式和形式各不相同,所以我只是在撰寫這個問題,因爲我無法理解那些用Google搜索的論壇提出的解決方案線程或他們不適用於我的情況。在相同的情況下,我無法理解解決方案或如何將其應用於我的案例,所以如果要通過鏈接來自該站點的解決方案來解決冗餘問題,真的很抱歉。

這是我如何找到適合配置一個事務管理器

<tx:annotation-driven transaction-manager="transactionManager" /> 
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="com.mysql.jdbc.Driver" 
     p:url="jdbc:mysql://localhost:3306/db" 
     p:username="dbuser" 
     p:password="dbuser"/> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="pu1"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true"/> 
      <property name="generateDdl" value="true"/> 
      <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/> 
     </bean> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

然後吾道內:

public class SimpleDaoImpl implements SimpleDao { 
@PersistenceContext 
private EntityManager entityManager; 

    /* methods that use entity manager for transactions and data detcing */ 
} 

所以兩個事務管理與不同數據源的情況下,如何將一個指定什麼實體經理注入哪個DAO或在Spring中不可能?

+2

你檢查了這個鏈接:http://stackoverflow.com/questions/8703242/spring-hibernate-jpa-multiple-databases?rq=1 – ye9ane

+1

我發現,如果你指定單位名稱@PersistenceContext,然後彈簧注入相應的實體管理器...不知道如果這是正確的使用,但它工作正常。 – Xeperis

回答

0

這裏我有兩個不同的數據源休眠和我使用@Qualifier指定會話工廠是這樣的:

@Autowired 
@Qualifier(value="sessionFactoryOne") 
private SessionFactory sessionFactoryOne; 

@Autowired 
@Qualifier(value="sessionFactoryTwo") 
private SessionFactory sessionFactoryTwo; 

然後我從這個傢伙的獲取會話。

在xml配置我有兩個dataSource,sessionFactory和transactionManager,每個DB一個。 工作正常;)