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

昨天在技术问答区,发出了这个问题,首先感谢大家给出的回复,但是还没能解决问题。刚刚又仔细的思考下,并查了些资料,终于解决了。下面贴出自己的解决方法:主要是配置文件和如何写注解

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

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

01 <?xml version="1.0" encoding="UTF-8"?>
02 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
03              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04              xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
05              version="1.0">
06  
07     <!--配置mysql数据源-->
08     <persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
09         <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>

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

001 <?xml version="1.0" encoding="UTF-8"?>
002 <beans xmlns="http://www.springframework.org/schema/beans"
003     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
004     xmlns:tx="http://www.springframework.org/schema/tx"
005     xsi:schemaLocation="http://www.springframework.org/schema/beans
006             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
007             http://www.springframework.org/schema/tx
008             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
009              
010     <bean id="defaultPersistenceUnitManager"
011         class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
012         <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
013         <!--  comment dataSourceLooup to use jndi -->
014         <property name="dataSourceLookup">
015             <bean
016                 class="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" />
017         </property>
018     </bean>
019      
020     <!-- #########################PostgreSql####################### -->  
021     <tx:annotation-driven transaction-manager="postgreEntityManagerFactory"/>
022      
023     <bean id="postgreJpaVendor"
024         class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
025          <property name="showSql" value="true" />
026          <property name="generateDdl" value="true" />
027     </bean>      
028      
029     <bean id="postgreDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
030        <property name="driverClassName" value="org.postgresql.Driver"/>
031        <property name="url" value="..."/>
032        <property name="username" value="..."/>
033        <property name="password" value="..."/>
034         <property name="initialSize" value="1"/>
035         <property name="maxActive" value="100"/>
036         <property name="maxIdle" value="8"/>
037         <property name="minIdle" value="1"/>
038     </bean>
039      
040     <bean id="postgreEntityManagerFactory"
041         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
042         <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" />
043         <property name="persistenceUnitName" value="postgre" />
044         <property name="jpaVendorAdapter" ref="postgreJpaVendor" />
045         <property name="loadTimeWeaver">
046             <bean
047                 class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
048         </property>
049         <property name="jpaDialect">
050             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
051             </bean>
052         </property>
053     </bean>      
054          
055     <bean id="postgreTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
056         <property name="entityManagerFactory" ref="postgreEntityManagerFactory" />
057         <qualifier value="postgreEM" />
058         <property name="jpaDialect">
059             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
060         </property>
061     </bean>
062      
063     <!--########################MySql################################# -->   
064     <tx:annotation-driven transaction-manager="mysqlEntityManagerFactory"/>
065      
066     <bean id="mysqlJpaVendor"
067         class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
068          <property name="showSql" value="true" />
069          <property name="generateDdl" value="true" />
070     </bean>
071      
072     <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
073        <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
074        <property name="url" value="..."/>
075        <property name="username" value="..."/>
076        <property name="password" value="..."/>
077         <property name="initialSize" value="1"/>
078         <property name="maxActive" value="100"/>
079         <property name="maxIdle" value="8"/>
080         <property name="minIdle" value="1"/>
081     </bean>
082      
083     <bean id="mysqlEntityManagerFactory"
084         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
085         <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager" />
086         <property name="persistenceUnitName" value="mysql" />
087         <property name="jpaVendorAdapter" ref="mysqlJpaVendor" />
088         <property name="loadTimeWeaver">
089             <bean
090                 class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
091         </property>
092         <property name="jpaDialect">
093             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
094             </bean>
095         </property>
096     </bean>
097      
098     <bean id="mysqlTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
099         <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>

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

-------------------------------------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     //......
7 }

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

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

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

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

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

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

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

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

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

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

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

1 @Entity(name = "TBL_BDSTORAGECOMPANY")
2 public class BdStorageCompany extends BaseModel {
3     
4    //.......
5  
6 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值