`
zzc1684
  • 浏览: 1195893 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

<?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>

 

<?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

@Transactional(value="mysqlEM")
public class MySqlBaseDaoImpl<T> implements IMySqlBaseDao<T>{
    @PersistenceContext(unitName="mysql")
    protected EntityManager em;
    
    //......
}
 
@Transactional(value="postgreEM")
public class PostgreSqlBaseDaoImpl<T> implements IPostgreSqlBaseDao<T>{
    @PersistenceContext(unitName="postgre")
    protected EntityManager em;

    //.......
}
 
-------------------------------------Service
@Service
@Transactional(value="mysqlEM")
public class ExternalEnvironmentServiceImpl extends
MySqlBaseDaoImpl<ExternalEnvironment> implements IExternalEnvironmentService {

}
 
@Service
@Transactional(value="postgreEM")
public class BdStorageCompanyServiceImpl extends PostgreSqlBaseDaoImpl<BdStorageCompany>
		implements IBdStorageCompanyService {

}
 

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

@Entity(name = "TBL_BDSTORAGECOMPANY")
public class BdStorageCompany extends BaseModel {
   
   //.......

}

 

@Entity(name = "TBL_EXTERNALENVIRONMENT")
public class ExternalEnvironment extends BaseModel{

    //......

}

 

分享到:
评论

相关推荐

    Spring Data JPA 原理与实战2021年

    │ 18 生产环境多数据源的处理方法有哪些?.mp4 │ 19 如何搞清楚事务、连接池的关系?正确配置是怎样的?.mp4 │ 20 Spring JPA 中的 Hibernate 加载过程与配置项是怎么回事?.mp4 │ 21 Peritence Context 所...

    Spring攻略(第二版 中文高清版).part1

    3.9 用基于XML的配置声明aspect 137 3.9.1 问题 137 3.9.2 解决方案 137 3.9.3 工作原理 137 3.10 Spring中的AspectJ加载时织入aspect 140 3.10.1 问题 140 3.10.2 解决方案 141 3.10.3 工作原理 ...

    Spring攻略(第二版 中文高清版).part2

    3.9 用基于XML的配置声明aspect 137 3.9.1 问题 137 3.9.2 解决方案 137 3.9.3 工作原理 137 3.10 Spring中的AspectJ加载时织入aspect 140 3.10.1 问题 140 3.10.2 解决方案 141 3.10.3 工作原理 ...

    Spring中文帮助文档

    12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. ...

    Spring API

    12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    配置子报表数据源 14.7.5. 配置Exporter的参数 15. 集成其它Web框架 15.1. 简介 15.2. 通用配置 15.3. JavaServer Faces 15.3.1. DelegatingVariableResolver 15.3.2. FacesContextUtils 15.4. Struts 15.4.1. ...

    Spring in Action(第2版)中文版

    5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里集成hibernate 5.4.1选择hibernate的版本 5.4.2使用hibernate...

    Spring in Action(第二版 中文高清版).part2

    5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 ...

    Spring in Action(第二版 中文高清版).part1

    5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 ...

    Spring 2.0 开发参考手册

    12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意点 12.3. JDO ...

    spring chm文档

    12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意点 12.3. JDO ...

    springboot参考指南

    配置一个数据源 ii. 67.2. 配置两个数据源 iii. 67.3. 使用Spring Data仓库 iv. 67.4. 从Spring配置分离@Entity定义 v. 67.5. 配置JPA属性 vi. 67.6. 使用自定义的EntityManagerFactory vii. 67.7. 使用两个Entity...

    ssh标准整合包(Oreacl数据库)

    ssh标准整合包 使用无使用jpa注解 使用hibernate配置文件 spring 注解 里面的包有55个 包括jstl 数据源dbcp

    spring-intro:Spring 框架简介,超过 10 节课程

    常用注解实践示例、问答S02 - 依赖注入Spring @Component 模型DI 类型 - 构造函数、setter、p 和 c 命名空间Bean 作用域实践示例、问答S03 - 数据访问 - 第一部分数据源绑定,连接池配置JDBCTemplate 介绍工具 - ...

    springtraining

    [Spring 生命周期] ( ) 有用的链接: Spring 中使用的基本注解(org.springframework.sterotype) @控制器@Repository @成分@服务数据源配置方法:(各有特点) 使用 JDBC 驱动程序(不推荐用于大型项目) 使用 JNDI...

Global site tag (gtag.js) - Google Analytics