Spring3+Hibernate3(Jpa) 配置多个数据源的解决方案(基于注解)

Spring3+Hibernate3(Jpa) 配置多个数据源的解决方案(基于注解)


----------------配置文件--------------------------------

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

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <persistence xmlns="http://java.sun.com/xml/ns/persistence" 
  3.              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.              xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
  5.              version="1.0"> 
  6.  
  7.     <!--配置mysql数据源--> 
  8.     <persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL"> 
  9.         <provider>org.hibernate.ejb.HibernatePersistence</provider> 
  10.         <non-jta-data-source>mysqlDataSource</non-jta-data-source> 
  11.        <!--这里的class是指要储存于本数据库的Entity--> 
  12.         <class>com.sunhope.model.core.ExternalEnvironment</class>    
  13.         
  14.         <properties> 
  15.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
  16.             <property name="hibernate.archive.autodetection" value="false"/> 
  17.             <property name="hibernate.transaction.auto_close_session" value="false"/> 
  18.             <property name="hibernate.hbm2ddl.auto" value="update" /> 
  19.         </properties> 
  20.     </persistence-unit> 
  21.     <!--配置postgre数据源--> 
  22.     <persistence-unit name="postgre" transaction-type="RESOURCE_LOCAL"> 
  23.         <provider>org.hibernate.ejb.HibernatePersistence</provider> 
  24.         
  25.         <non-jta-data-source>postgreDataSource</non-jta-data-source> 
  26.  
  27.         <class>com.sunhope.model.baseinfo.BdStorageCompany</class> 
  28.         <class>com.sunhope.model.baseinfo.BdHouseType</class> 
  29.         <class>com.sunhope.model.baseinfo.BdStorage</class> 
  30.         <class>com.sunhope.model.core.StoreEnvironment</class> 
  31.         
  32.         <properties> 
  33.             <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
  34.             <property name="hibernate.archive.autodetection" value="false"/> 
  35.             <property name="hibernate.transaction.auto_close_session" value="false"/> 
  36.             <property name="hibernate.hbm2ddl.auto" value="update" /> 
  37.         </properties> 
  38.     </persistence-unit> 
  39.     
  40. </persistence> 
<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!--配置mysql数据源-->
    <persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>mysqlDataSource</non-jta-data-source>
       <!--这里的class是指要储存于本数据库的Entity-->
        <class>com.sunhope.model.core.ExternalEnvironment</class>   
       
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
            <property name="hibernate.archive.autodetection" value="false"/>
            <property name="hibernate.transaction.auto_close_session" value="false"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
    <!--配置postgre数据源-->
    <persistence-unit name="postgre" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
       
        <non-jta-data-source>postgreDataSource</non-jta-data-source>

        <class>com.sunhope.model.baseinfo.BdStorageCompany</class>
        <class>com.sunhope.model.baseinfo.BdHouseType</class>
        <class>com.sunhope.model.baseinfo.BdStorage</class>
        <class>com.sunhope.model.core.StoreEnvironment</class>
       
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.archive.autodetection" value="false"/>
            <property name="hibernate.transaction.auto_close_session" value="false"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
   
</persistence>

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

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.     xmlns:tx="http://www.springframework.org/schema/tx" 
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans 
  6.             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  7.             http://www.springframework.org/schema/tx 
  8.             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 
  9.              
  10.     <bean id="defaultPersistenceUnitManager" 
  11.         class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
  12.         <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/> 
  13.         <!--  comment dataSourceLooup to use jndi --> 
  14.         <property name="dataSourceLookup"> 
  15.             <bean 
  16.                 class="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" /> 
  17.         </property> 
  18.     </bean> 
  19.      
  20.     <!-- #########################PostgreSql####################### -->    
  21.     <tx:annotation-driven transaction-manager="postgreEntityManagerFactory"/> 
  22.      
  23.     <bean id="postgreJpaVendor" 
  24.         class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
  25.          <property name="showSql" value="true" /> 
  26.          <property name="generateDdl" value="true" /> 
  27.     </bean>        
  28.      
  29.     <bean id="postgreDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
  30.        <property name="driverClassName" value="org.postgresql.Driver"/> 
  31.        <property name="url" value="..."/> 
  32.        <property name="username" value="..."/> 
  33.        <property name="password" value="..."/> 
  34.         <property name="initialSize" value="1"/> 
  35.         <property name="maxActive" value="100"/> 
  36.         <property name="maxIdle" value="8"/> 
  37.         <property name="minIdle" value="1"/> 
  38.     </bean> 
  39.      
  40.     <bean id="postgreEntityManagerFactory" 
  41.         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
  42.         <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" /> 
  43.         <property name="persistenceUnitName" value="postgre" /> 
  44.         <property name="jpaVendorAdapter" ref="postgreJpaVendor" /> 
  45.         <property name="loadTimeWeaver"> 
  46.             <bean 
  47.                 class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
  48.         </property> 
  49.         <property name="jpaDialect"> 
  50.             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"> 
  51.             </bean> 
  52.         </property> 
  53.     </bean>        
  54.          
  55.     <bean id="postgreTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
  56.         <property name="entityManagerFactory" ref="postgreEntityManagerFactory" /> 
  57.         <qualifier value="postgreEM" /> 
  58.         <property name="jpaDialect"> 
  59.             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
  60.         </property> 
  61.     </bean> 
  62.      
  63.     <!--########################MySql################################# -->     
  64.     <tx:annotation-driven transaction-manager="mysqlEntityManagerFactory"/> 
  65.      
  66.     <bean id="mysqlJpaVendor" 
  67.         class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
  68.          <property name="showSql" value="true" /> 
  69.          <property name="generateDdl" value="true" /> 
  70.     </bean> 
  71.      
  72.     <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
  73.        <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> 
  74.        <property name="url" value="..."/> 
  75.        <property name="username" value="..."/> 
  76.        <property name="password" value="..."/> 
  77.         <property name="initialSize" value="1"/> 
  78.         <property name="maxActive" value="100"/> 
  79.         <property name="maxIdle" value="8"/> 
  80.         <property name="minIdle" value="1"/> 
  81.     </bean> 
  82.      
  83.     <bean id="mysqlEntityManagerFactory" 
  84.         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
  85.         <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" /> 
  86.         <property name="persistenceUnitName" value="mysql" /> 
  87.         <property name="jpaVendorAdapter" ref="mysqlJpaVendor" /> 
  88.         <property name="loadTimeWeaver"> 
  89.             <bean 
  90.                 class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
  91.         </property> 
  92.         <property name="jpaDialect"> 
  93.             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"> 
  94.             </bean> 
  95.         </property> 
  96.     </bean> 
  97.      
  98.     <bean id="mysqlTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
  99.         <property name="entityManagerFactory" ref="mysqlEntityManagerFactory" /> 
  100.         <qualifier value="mysqlEM" /> 
  101.         <property name="jpaDialect"> 
  102.             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
  103.         </property> 
  104.     </bean> 
  105.      
  106. </beans> 
<?xml version="1.0" encoding="UTF-8"?>
<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">
            
    <bean id="defaultPersistenceUnitManager"
		class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
		<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
		<!--  comment dataSourceLooup to use jndi -->
		<property name="dataSourceLookup">
			<bean
				class="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" />
		</property>
	</bean>
	
	<!-- #########################PostgreSql####################### -->	
	<tx:annotation-driven transaction-manager="postgreEntityManagerFactory"/>
	
	<bean id="postgreJpaVendor"
		class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		 <property name="showSql" value="true" />
         <property name="generateDdl" value="true" />
	</bean>		
	
    <bean id="postgreDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="org.postgresql.Driver"/>
       <property name="url" value="..."/>
       <property name="username" value="..."/>
       <property name="password" value="..."/>
		<property name="initialSize" value="1"/>
		<property name="maxActive" value="100"/>
		<property name="maxIdle" value="8"/>
		<property name="minIdle" value="1"/>
    </bean>
    
    <bean id="postgreEntityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" />
		<property name="persistenceUnitName" value="postgre" />
		<property name="jpaVendorAdapter" ref="postgreJpaVendor" />
		<property name="loadTimeWeaver">
			<bean
				class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
		</property>
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
			</bean>
		</property>
	</bean>      	
		
	<bean id="postgreTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="postgreEntityManagerFactory" />
		<qualifier value="postgreEM" />
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
		</property>
	</bean>
	
	<!--########################MySql################################# -->	
	<tx:annotation-driven transaction-manager="mysqlEntityManagerFactory"/>
	
	<bean id="mysqlJpaVendor"
		class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		 <property name="showSql" value="true" />
         <property name="generateDdl" value="true" />
	</bean>
	
	<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
       <property name="url" value="..."/>
       <property name="username" value="..."/>
       <property name="password" value="..."/>
		<property name="initialSize" value="1"/>
		<property name="maxActive" value="100"/>
		<property name="maxIdle" value="8"/>
		<property name="minIdle" value="1"/>
    </bean>
    
	<bean id="mysqlEntityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" />
		<property name="persistenceUnitName" value="mysql" />
		<property name="jpaVendorAdapter" ref="mysqlJpaVendor" />
		<property name="loadTimeWeaver">
			<bean
				class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
		</property>
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
			</bean>
		</property>
	</bean>
	
	<bean id="mysqlTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="mysqlEntityManagerFactory" />
		<qualifier value="mysqlEM" />
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
		</property>
	</bean>
	
</beans>

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

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

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

  1. @Transactional(value="mysqlEM"
  2. public class MySqlBaseDaoImpl<T> implements IMySqlBaseDao<T>{ 
  3.     @PersistenceContext(unitName="mysql"
  4.     protected EntityManager em; 
  5.      
  6.     //...... 
@Transactional(value="mysqlEM")
public class MySqlBaseDaoImpl<T> implements IMySqlBaseDao<T>{
    @PersistenceContext(unitName="mysql")
    protected EntityManager em;
    
    //......
}

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

  1. @Transactional(value="postgreEM"
  2. public class PostgreSqlBaseDaoImpl<T> implements IPostgreSqlBaseDao<T>{ 
  3.     @PersistenceContext(unitName="postgre"
  4.     protected EntityManager em; 
  5.  
  6.     //....... 
@Transactional(value="postgreEM")
public class PostgreSqlBaseDaoImpl<T> implements IPostgreSqlBaseDao<T>{
    @PersistenceContext(unitName="postgre")
    protected EntityManager em;

    //.......
}

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

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

  1. @Service 
  2. @Transactional(value="mysqlEM"
  3. public class ExternalEnvironmentServiceImpl extends 
  4. MySqlBaseDaoImpl<ExternalEnvironment> implements IExternalEnvironmentService { 
  5.  
@Service
@Transactional(value="mysqlEM")
public class ExternalEnvironmentServiceImpl extends
MySqlBaseDaoImpl<ExternalEnvironment> implements IExternalEnvironmentService {

}

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

  1. @Service 
  2. @Transactional(value="postgreEM"
  3. public class BdStorageCompanyServiceImpl extends PostgreSqlBaseDaoImpl<BdStorageCompany> 
  4.         implements IBdStorageCompanyService { 
  5.  
@Service
@Transactional(value="postgreEM")
public class BdStorageCompanyServiceImpl extends PostgreSqlBaseDaoImpl<BdStorageCompany>
		implements IBdStorageCompanyService {

}

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

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

  1. @Entity(name = "TBL_EXTERNALENVIRONMENT"
  2. public class ExternalEnvironment extends BaseModel{ 
  3.  
  4.     //...... 
  5.  
@Entity(name = "TBL_EXTERNALENVIRONMENT")
public class ExternalEnvironment extends BaseModel{

    //......

}

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

  1. @Entity(name = "TBL_BDSTORAGECOMPANY"
  2. public class BdStorageCompany extends BaseModel { 
  3.     
  4.    //....... 
  5.  
@Entity(name = "TBL_BDSTORAGECOMPANY")
public class BdStorageCompany extends BaseModel {
   
   //.......

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值