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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Spring3+Hibernate3(Jpa) 配置多个数据源的解决方案(基于注解) ----------------配置文件-------------------------------- -------------------------------------META-INF/persistence.

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

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

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

[html] view plain copy

  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.     <!--配置mysql数据源-->
  7.     <persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
  8.         <provider>org.hibernate.ejb.HibernatePersistence</provider>
  9.         <non-jta-data-source>mysqlDataSource</non-jta-data-source>
  10.        <!--这里的class是指要储存于本数据库的Entity-->
  11.         <class>com.sunhope.model.core.ExternalEnvironment</class>
  12.         <properties>
  13.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
  14.             <property name="hibernate.archive.autodetection" value="false"/>
  15.             <property name="hibernate.transaction.auto_close_session" value="false"/>
  16.             <property name="hibernate.hbm2ddl.auto" value="update" />
  17.         </properties>
  18.     </persistence-unit>
  19.     <!--配置postgre数据源-->
  20.     <persistence-unit name="postgre" transaction-type="RESOURCE_LOCAL">
  21.         <provider>org.hibernate.ejb.HibernatePersistence</provider>
  22.         <non-jta-data-source>postgreDataSource</non-jta-data-source>
  23.         <class>com.sunhope.model.baseinfo.BdStorageCompany</class>
  24.         <class>com.sunhope.model.baseinfo.BdHouseType</class>
  25.         <class>com.sunhope.model.baseinfo.BdStorage</class>
  26.         <class>com.sunhope.model.core.StoreEnvironment</class>
  27.         <properties>
  28.             <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
  29.             <property name="hibernate.archive.autodetection" value="false"/>
  30.             <property name="hibernate.transaction.auto_close_session" value="false"/>
  31.             <property name="hibernate.hbm2ddl.auto" value="update" />
  32.         </properties>
  33.     </persistence-unit>
  34. </persistence>

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

[html] view plain copy

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

 

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

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

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

[java] view plain copy

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

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

[java] view plain copy

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

 

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

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

[java] view plain copy

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

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

[java] view plain copy

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

 

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

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

[java] view plain copy

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

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

[java] view plain copy

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
15 1
|
3天前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
4天前
|
存储 缓存 Java
【JavaEE】Spring中注解的方式去获取Bean对象
【JavaEE】Spring中注解的方式去获取Bean对象
3 0
|
4天前
|
存储 Java 对象存储
【JavaEE】Spring中注解的方式去存储Bean对象
【JavaEE】Spring中注解的方式去存储Bean对象
7 0
|
4天前
|
XML Java 数据格式
Spring高手之路18——从XML配置角度理解Spring AOP
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
22 6
Spring高手之路18——从XML配置角度理解Spring AOP
|
4天前
|
消息中间件 开发框架 Java
什么是Spring Boot 自动配置?
Spring Boot 是一个流行的 Java 开发框架,它提供了许多便利的功能和工具,帮助开发者快速构建应用程序。其中一个最引人注目的特性是其强大的自动配置功能。
10 0
|
4天前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
4天前
|
Java Spring
Spring文件配置以及获取
Spring文件配置以及获取
13 0
|
4天前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
4天前
|
SQL 缓存 Java
Java一分钟之-Hibernate:ORM框架实践
【5月更文挑战第15天】Hibernate是Java的ORM框架,简化数据库操作。本文列举并解决了一些常见问题: 1. 配置SessionFactory,检查数据库连接和JDBC驱动。 2. 实体类需标记主键,属性映射应匹配数据库列。 3. 使用事务管理Session,记得关闭。 4. CRUD操作时注意对象状态和查询结果转换。 5. 使用正确HQL语法,防止SQL注入。 6. 根据需求配置缓存。 7. 懒加载需在事务内处理,避免`LazyInitializationException`。理解和避免这些问题能提升开发效率。
19 0