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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
缓存 Java 数据库连接
Spring Boot奇迹时刻:@PostConstruct注解如何成为应用初始化的关键先生?
【8月更文挑战第29天】作为一名Java开发工程师,我一直对Spring Boot的便捷性和灵活性着迷。本文将深入探讨@PostConstruct注解在Spring Boot中的应用场景,展示其在资源加载、数据初始化及第三方库初始化等方面的作用。
53 0
|
1天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
8 2
|
9天前
|
Java Spring 容器
Spring使用异步注解@Async正确姿势
Spring使用异步注解@Async正确姿势,异步任务,spring boot
|
9天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
9天前
|
XML 前端开发 Java
控制spring框架注解介绍
控制spring框架注解介绍
|
23天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
Java 数据库连接 数据库
携手前行:在Java世界中深入挖掘Hibernate与JPA的协同效应
【8月更文挑战第31天】Java持久化API(JPA)是一种Java规范,为数据库数据持久化提供对象关系映射(ORM)方法。JPA定义了实体类与数据库表的映射及数据查询和事务控制方式,确保不同实现间的兼容性。Hibernate是JPA规范的一种实现,提供了二级缓存、延迟加载等丰富特性,提升应用性能和可维护性。通过结合JPA和Hibernate,开发者能编写符合规范且具有高度可移植性的代码,并利用Hibernate的额外功能优化数据持久化操作。
35 0
|
2月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
24 0
|
2月前
|
监控 安全 Java
【开发者必备】Spring Boot中自定义注解与处理器的神奇魔力:一键解锁代码新高度!
【8月更文挑战第29天】本文介绍如何在Spring Boot中利用自定义注解与处理器增强应用功能。通过定义如`@CustomProcessor`注解并结合`BeanPostProcessor`实现特定逻辑处理,如业务逻辑封装、配置管理及元数据分析等,从而提升代码整洁度与可维护性。文章详细展示了从注解定义、处理器编写到实际应用的具体步骤,并提供了实战案例,帮助开发者更好地理解和运用这一强大特性,以实现代码的高效组织与优化。
57 0
|
JavaScript Java 数据库连接
spring对hibernate的集成中的回调(CallBack)机制
spring对hibernate的集成中的回调(CallBack)机制
208 0
spring对hibernate的集成中的回调(CallBack)机制
下一篇
无影云桌面