`
zzc1684
  • 浏览: 1230932 次
  • 性别: 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 4.0.6+Hibernate 4.3.5 + Jpa+DBCP2

    在Spring框架中集成Hibernate和JPA,可以利用Spring的事务管理、数据源配置和DAO支持。DBCP2(Jakarta Commons DBCP2)是Apache的一个数据库连接池组件,用于提高数据库连接的效率和可管理性。在Spring中配置DBCP2...

    jersey+spring2.5+hibernate3.3+jpa

    在JPA和Hibernate中,这种关系可以通过@OneToMany注解来定义,实现一对多的映射,例如一个用户可以有多个订单。 综合以上内容,这个项目可能是一个使用RESTful API提供数据服务的应用,其中业务逻辑由Spring管理,...

    spring+springmvc+hibernate+jpa搭建

    在IT行业中,构建一个基于Spring、SpringMVC、Hibernate和JPA的开发环境是常见的任务,这四个组件都是Java企业级应用开发中的重要工具。让我们深入探讨这些技术以及如何将它们整合在一起搭建一个完整的开发环境。 *...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    spring3.0 mvc+hibernate3.6 +jpa 注解实例

    在本实例中,我们探讨的是一个基于Spring 3.0、Hibernate 3.6和Java Persistence API (JPA) 的集成应用,其中充分利用了注解来简化开发过程。这是一个适用于初学者和经验丰富的开发者深入了解这些技术如何协同工作的...

    Spring+SpringMVC+SpringDataJPA+Hibernate

    接着,配置Spring Data JPA和Hibernate,包括数据源、实体管理工厂、事务管理器等。最后,定义Repository接口,Spring Data JPA会自动实现这些接口,提供数据库操作方法。 在实际开发中,Spring Data JPA的...

    Spring + JPA + Hibernate配置

    在实际项目中,集成Spring、JPA和Hibernate时,开发者需要配置Spring的XML或Java配置文件,声明数据源、事务管理器以及JPA的实体扫描路径。同时,还需要配置Hibernate的相关属性,比如连接池、方言等。此外,可能还...

    spring3+springmvc+jpa+hibernate

    2. 数据源配置:项目中应包含数据源的配置,用于连接数据库,可能在`persistence.xml`或Spring配置文件中。 3. 实体类(Entities):这些是与数据库表映射的Java类,使用JPA注解进行配置。 4. Repository接口:基于...

    非注解Springmvc+spring+hibernate 入门实例

    为了整合SpringMVC、Spring和Hibernate,你需要在Spring的配置文件中引入Hibernate的相关配置,如数据源、SessionFactory以及事务管理器。同时,你还需要配置一个Hibernate的本地SessionFactory Bean,以便Spring...

    maven+springjpa+hibernate

    2. **配置Spring Boot**:如果使用Spring Boot,配置文件`application.properties`或`application.yml`中需设置数据源和JPA属性,例如数据库连接信息、Hibernate配置等。 3. **创建实体类**:定义Java类作为数据...

    spring mvc + spring + hibernate 全注解整合开发视频教程 05

    在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发 05”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring MVC、Spring和Hibernate的集成应用,特别是如何利用注解进行高效无XML配置的开发...

    Spring3+Hibernate3所需包及配置文件

    标题 "Spring3+Hibernate3所需包及配置文件" 指的是在开发Java Web应用程序时,结合Spring框架的第3个版本(Spring 3)与Hibernate ORM框架的第3个版本(Hibernate 3)所必需的库文件和配置文档。这个组合常用于实现...

    基于jpa+hibernate+spring+spring mvc注解方式项目

    而使用Spring Data JPA时,只需要配置数据源、JPA供应商(如Hibernate)以及实体扫描路径即可。注解如`@PersistenceContext`可以注入`EntityManager`,`@EntityScan`用于指定实体类的位置。 **5. Spring MVC的处理...

    SpringMVC+Spring3+Hibernate4

    SpringMVC、Spring3和Hibernate4是Java Web开发中三个非常重要的框架,它们共同构建了一个强大的后端架构。SpringMVC作为Spring框架的一部分,主要负责处理HTTP请求和响应,Spring3则提供了依赖注入(DI)和面向切面...

    spring+hibernate整合实现简单数据库添加记录

    每个实体类通常对应一个Hibernate的.hbm.xml映射文件,或者使用JPA的@Entity注解和注解驱动配置。 4. **DAO层**:定义数据访问对象(DAO),这些对象将处理与数据库的交互。在Spring中,我们可以使用DAO接口,然后...

    Spring+Hibernate+Jpa+Struts2整合实例

    6. **配置与整合**:整合这些框架通常涉及编写XML配置文件(如Spring的`beans.xml`,Struts2的`struts.xml`),设置相应的bean,配置数据源,以及定义Action类和结果映射。同时,还需要确保所有框架版本兼容,并正确...

    Spring+hibernate整合源代码

    3. **数据源配置**:配置数据源是整合的起点。你需要在 Spring 配置文件中定义数据源 Bean,如使用 DriverManagerDataSource 或者 DataSourceProxy,提供连接数据库所需的 JDBC 配置信息。 4. **SessionFactory ...

    jdk 1.8 springmvc+hibernate+springData jpa基本框架.rar

    该压缩包文件“jdk 1.8 springmvc+hibernate+springData jpa基本框架.rar”是一个基于Java技术栈的Web开发项目模板,主要涵盖了Spring MVC、Hibernate和Spring Data JPA这三个核心组件。这个项目是针对Java 1.8版本...

    struts+spring+hibernate三大框架整合

    Spring管理SessionFactory,通常在ApplicationContext.xml中配置,通过`&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"&gt;`指定数据源、映射文件、hibernate配置等。...

    (转)jpa+Spring+hibernate 简单配置实例

    2. **配置Spring**:创建Spring的配置文件,如`applicationContext.xml`,配置`LocalContainerEntityManagerFactoryBean`以指定JPA供应商(Hibernate)和数据源。同时,配置`JpaTransactionManager`以处理事务。 3. ...

Global site tag (gtag.js) - Google Analytics