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

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
48
分享
相关文章
|
17天前
|
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
55 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
56 0
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
71 0
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
37 0
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
42 0
第2讲 Kotlin + Spring Boot 集成 JPA 【Kotlin + Spring Boot 服务端开发课程系列】
【Kotlin + Spring Boot 服务端开发课程系列】第2讲 Kotlin + Spring Boot 集成 JPA 【视频教程】 投影片01.
1096 0
Spring Boot集成JPA的Column注解命名字段无效的问题
偶然发现,Spring Boot集成jpa编写实体类的时候,默认使用的命名策略是下划线分隔的字段命名。
4033 0
6.2 Spring Boot集成jpa
6.2 Spring Boot集成jpa Java持久化API(JPA,Java Persistence API)是一个将对象映射为关系数据库的标准技术。
1058 0
spring集成jpa【为什么有 persistant.xml 文件呢?】
原文地址: http://www.cnblogs.com/javahuang/archive/2012/12/19/2824633.html spring集成JPA的其中一种方式 JPA和hibernate的关系: spring对JPA的集成.
745 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等