was下jpa配置多個數據源 more datasource

jpa 下配置多個數據源 ,可以依據jpa的規範,在persistence.xml 裏面配置多個<persistence-unit>,

 

當然,persistence-unit的名字不能重複:

 

<persistence-unit name="TODS"  transaction-type="JTA">
        <provider>
            org.apache.openjpa.persistence.PersistenceProviderImpl
        </provider>
        <jta-data-source>jdbc/TODS</jta-data-source>
        <class>com.ibm.its.itmc.entity.Zone</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
          <property name="openjpa.jdbc.Schema" value="TODS" />      
          <property name="openjpa.jdbc.DBDictionary" value="db2" />      
          <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
          <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
        </properties>
    </persistence-unit>
   
    <persistence-unit name="TADS" transaction-type="JTA">
        <provider>
            org.apache.openjpa.persistence.PersistenceProviderImpl
        </provider>
        <jta-data-source>jdbc/testVD</jta-data-source>
        <class>com.ibm.its.itmc.entity.TadsZone</class>
        <class>com.ibm.its.itmc.entity.TadsRoad</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>       
        <properties>
          <property name="openjpa.jdbc.Schema" value="db2admin" />      
          <property name="openjpa.jdbc.DBDictionary" value="db2" />      
          <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
          <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
        </properties>
    </persistence-unit>

 

當然也可以配置更多的數據源,我這裏只配了兩個。

 

在調用的時候,只要指定不同的unit-name給jpa的EntityManager就可以了:

 

@PersistenceContext(unitName="TADS")
    private EntityManager em;

或者

@PersistenceContext(unitName="TODS")
    private EntityManager em;

 

然後通過em就可以訪問不同的數據源下面的實體了。至於orm.xml不用修改,注意一定是unitName, 而不是name,

如果只是一個數據源,寫name就能默認找到datasource , 但是多個數據源不配置@PersistenceContext(unitName="TADS")

而只寫@PersistenceContext(name="TADS"), 會報TODS can not resolve. 的錯誤。

 

這只是在was下面使用jpa的經驗,希望能帶給你些提示。

發佈了36 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章