天天看點

Spring3+Hibernate3(Jpa) 配置多個資料源的解決方案(基于注解)Spring3+Hibernate3(Jpa) 配置多個資料源的解決方案(基于注解)

----------------配置檔案--------------------------------

-------------------------------------META-INF/persistence.xml------------------------------------------------------

<b>[html]</b> view plain copy

&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"

             version="1.0"&gt;

    &lt;!--配置mysql資料源--&gt;

    &lt;persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL"&gt;

        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;

        &lt;non-jta-data-source&gt;mysqlDataSource&lt;/non-jta-data-source&gt;

       &lt;!--這裡的class是指要儲存于本資料庫的Entity--&gt;

        &lt;class&gt;com.sunhope.model.core.ExternalEnvironment&lt;/class&gt;

        &lt;properties&gt;

            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/&gt;

            &lt;property name="hibernate.archive.autodetection" value="false"/&gt;

            &lt;property name="hibernate.transaction.auto_close_session" value="false"/&gt;

            &lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;

        &lt;/properties&gt;

    &lt;/persistence-unit&gt;

    &lt;!--配置postgre資料源--&gt;

    &lt;persistence-unit name="postgre" transaction-type="RESOURCE_LOCAL"&gt;

        &lt;non-jta-data-source&gt;postgreDataSource&lt;/non-jta-data-source&gt;

        &lt;class&gt;com.sunhope.model.baseinfo.BdStorageCompany&lt;/class&gt;

        &lt;class&gt;com.sunhope.model.baseinfo.BdHouseType&lt;/class&gt;

        &lt;class&gt;com.sunhope.model.baseinfo.BdStorage&lt;/class&gt;

        &lt;class&gt;com.sunhope.model.core.StoreEnvironment&lt;/class&gt;

            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/&gt;

&lt;/persistence&gt;

-------------------------------------applicationContext.xml---------------------------------------------------------

&lt;beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

            http://www.springframework.org/schema/tx

            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"&gt;

    &lt;bean id="defaultPersistenceUnitManager"

        class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"&gt;

        &lt;property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/&gt;

        &lt;!--  comment dataSourceLooup to use jndi --&gt;

        &lt;property name="dataSourceLookup"&gt;

            &lt;bean

                class="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" /&gt;

        &lt;/property&gt;

    &lt;/bean&gt;

    &lt;!-- #########################PostgreSql####################### --&gt;

    &lt;tx:annotation-driven transaction-manager="postgreEntityManagerFactory"/&gt;

    &lt;bean id="postgreJpaVendor"

        class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"&gt;

         &lt;property name="showSql" value="true" /&gt;

         &lt;property name="generateDdl" value="true" /&gt;

    &lt;bean id="postgreDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;

       &lt;property name="driverClassName" value="org.postgresql.Driver"/&gt;

       &lt;property name="url" value="..."/&gt;

       &lt;property name="username" value="..."/&gt;

       &lt;property name="password" value="..."/&gt;

        &lt;property name="initialSize" value="1"/&gt;

        &lt;property name="maxActive" value="100"/&gt;

        &lt;property name="maxIdle" value="8"/&gt;

        &lt;property name="minIdle" value="1"/&gt;

    &lt;bean id="postgreEntityManagerFactory"

        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;

        &lt;property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" /&gt;

        &lt;property name="persistenceUnitName" value="postgre" /&gt;

        &lt;property name="jpaVendorAdapter" ref="postgreJpaVendor" /&gt;

        &lt;property name="loadTimeWeaver"&gt;

                class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /&gt;

        &lt;property name="jpaDialect"&gt;

            &lt;bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"&gt;

            &lt;/bean&gt;

    &lt;bean id="postgreTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;

        &lt;property name="entityManagerFactory" ref="postgreEntityManagerFactory" /&gt;

        &lt;qualifier value="postgreEM" /&gt;

            &lt;bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /&gt;

    &lt;!--########################MySql################################# --&gt;

    &lt;tx:annotation-driven transaction-manager="mysqlEntityManagerFactory"/&gt;

    &lt;bean id="mysqlJpaVendor"

    &lt;bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;

       &lt;property name="driverClassName" value="org.gjt.mm.mysql.Driver"/&gt;

    &lt;bean id="mysqlEntityManagerFactory"

        &lt;property name="persistenceUnitName" value="mysql" /&gt;

        &lt;property name="jpaVendorAdapter" ref="mysqlJpaVendor" /&gt;

    &lt;bean id="mysqlTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;

        &lt;property name="entityManagerFactory" ref="mysqlEntityManagerFactory" /&gt;

        &lt;qualifier value="mysqlEM" /&gt;

&lt;/beans&gt;

---------------------注解

-------------------------------------DAO-------------------------------------------------------------

------------MySqlBaseDaoImpl.java

<b>[java]</b> view plain copy

@Transactional(value="mysqlEM")

public class MySqlBaseDaoImpl&lt;T&gt; implements IMySqlBaseDao&lt;T&gt;{

    @PersistenceContext(unitName="mysql")

    protected EntityManager em;

    //......

}

------------PostgreSqlBaseDaoImpl.java

@Transactional(value="postgreEM")

public class PostgreSqlBaseDaoImpl&lt;T&gt; implements IPostgreSqlBaseDao&lt;T&gt;{

    @PersistenceContext(unitName="postgre")

    //.......

-------------------------------------Service-------------------------------------------------------------

---------------ExternalEnvironmentServiceImpl.java

@Service

public class ExternalEnvironmentServiceImpl extends

MySqlBaseDaoImpl&lt;ExternalEnvironment&gt; implements IExternalEnvironmentService {

--------------------BdStorageCompanyServiceImpl.java

public class BdStorageCompanyServiceImpl extends PostgreSqlBaseDaoImpl&lt;BdStorageCompany&gt;

        implements IBdStorageCompanyService {

-------------------------------------Model(Entity)-------------------------------------------------------------

-------------ExternalEnvironment.java---------------------------------------------------

@Entity(name = "TBL_EXTERNALENVIRONMENT")

public class ExternalEnvironment extends BaseModel{

-----------------BdStorageCompany.java-------------------------------------------------

@Entity(name = "TBL_BDSTORAGECOMPANY")

public class BdStorageCompany extends BaseModel {

   //.......

 原文位址http://www.bieryun.com/2109.html