环境:Spring 3.0 ,Hibernate 3.5 ,同类型数据库(DB2)

编前语:此片仅粗略的描述使用Spring和Hibernate采用注入方式管理多数据源在不同事务的情况下使用的方法。

涉及到的文件三个:testDaoImpl (数据库操作文件),applicationContext.xml(Spring主配置文件) ,jdbc.properties (数据库连接和各种数据库相关配置文件)

总体分三步:

1.增加数据库连接

2.在Spring配置中增加新的数据源配置

3.在需要使用不同数据源的操作实现类中指定新的sessionFactory和transactional

具体使用修改如下(注意:所有配置仅用于多数据源连接测试,并非优化后配置,套用需谨慎!):

1.增加数据库连接配置(该配置文件中包含了cpool的配置和hibernate的配置信息在xml配置中直接调用) jdbc.properties

jdbcq.driverClassName=com.db2.jcc.DB2Driver
jdbcq.url=jdbc:db2://192.168.1.11:50001/DB01:currentSchema=USER1;
jdbcq.username=user1
jdbcq.password=user1

2.在Spring配置中增加新的数据源配置 applicationContext.xml

(前提配置)

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:jdbc.properties</value>
</property>
</bean>

新增数据源:

    <bean id="dataSourceQ" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbcq.driverClassName}" />
<property name="jdbcUrl" value="${jdbcq.url}" />
<property name="user" value="${jdbcq.username}" />
<property name="password" value="${jdbcq.password}" />
<property name="autoCommitOnClose" value="true" />
<property name="checkoutTimeout" value="${cpool.checkoutTimeout}" />
<property name="initialPoolSize" value="${cpool.minPoolSize}" />
<property name="minPoolSize" value="${cpool.minPoolSize}" />
<property name="maxPoolSize" value="${cpool.maxPoolSize}" />
<property name="maxIdleTime" value="${cpool.maxIdleTime}" />
<property name="acquireIncrement" value="${cpool.acquireIncrement}" />
<property name="acquireRetryAttempts" value="30" />
<property name="acquireRetryDelay" value="1000" />
<property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}" />
</bean>

sessionFactory配置:

此处实体包是注解方式必须有的,只有在sessionFactory 中进行扫描过的实体包才能在注入该sessionFactory的数据库操作impl中操作。否则会出现找不到对应实体的异常。此处仅扫描用于测试的包。

另外一点需要注意的是如果配置二级缓存那么需要使用不同的配置文件和配置,否则会出现缓存空间已经被使用的异常。当然用于测试可以直接去掉这部分配置

此处新建了另外一个配置文件,同时配置了不同的缓存空间

    <!-- 新的sessioinFactory-->
<bean id="sessionFactoryQ"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 新的数据源-->
<property name="dataSource" ref="dataSourceQ" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.query.substitutions">${hibernate.query.substitutions}</prop>
<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
<!-- 使用ehcache -->
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<!-- 最优化二级缓存 -->
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache-hibernate-q.xml</prop>
</props>
</property>
<!-- 扫描实体所在包 只扫描业务包-->
<property name="packagesToScan" >
<list>
<value>com.back.entities.test</value>
</list>
</property>
</bean>

事务管理配置:

    <!-- 指定事务管理 -->
<bean id="transactionManagerQ" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryQ" />
</bean>
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManagerQ" />

3.在需要使用不同数据源的操作实现类中指定新的sessionFactory和transactional

@Repository
@Transactional("transactionManagerQ")
public class TestDaoImpl implements TestDao { private SessionFactory sessionFactory; @Resource(name="sessionFactoryQ")
public void setSessionFactory(SessionFactory sessionFactoryQ) {
this.sessionFactory = sessionFactoryQ;
}
}

大概就是这样,需要配置和修改的地方都如上已经处理了。因为是注解所以和纯xml配置会有不同的地方。数据库操作的实现类在项目中其实会继承框架的一个实现类,但为了便于看到全貌,所以修改成以上的样子,从而可以看到sessionFactory的设置。

Spring+Hibernate 多数据源不同事务创建的更多相关文章

  1. JAVA spring hibernate 多数据源配置记录

    数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  2. 关于Spring Boot 多数据源的事务管理

    自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和"约定大于配置"的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spri ...

  3. Spring动态切换数据源及事务

    前段时间花了几天来解决公司框架ssm上事务问题.如果不动态切换数据源话,直接使用spring的事务配置,是完全没有问题的.由于框架用于各个项目的快速搭建,少去配置各个数据源配置xml文件等.采用了动态 ...

  4. spring+hibernate管理多个数据源(非分布式事务)

    本文通过一个demo,介绍如何使用spring+hibernate管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务. 这个demo将使用两个事务管理器分别管理两个数据源.对于每一个独立 ...

  5. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  6. spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式

    spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...

  7. Spring:(三) --常见数据源及声明式事务配置

    Spring自带了一组数据访问框架,集成了多种数据访问技术.无论我们是直接通过 JDBC 还是像Hibernate或Mybatis那样的框架实现数据持久化,Spring都可以为我们消除持久化代码中那些 ...

  8. 使用spring+hibernate+atomikos+tomcat构建分布式事务

    本文通过一个demo,介绍如何使用spring+hibernate+atomikos+tomcat构建在一个事务中涉及两个数据源的web应用. demo功能:实现一个能成功提交和回滚的涉及两个数据库数 ...

  9. atitit.spring hibernate的事务机制 spring不能保存对象的解决

    atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能..log黑头马sql语言.. sessionF ...

随机推荐

  1. 【解决】Can't find default configuration "arch/x86/configs/xx_defconfig"!

    Can't find default configuration "arch/x86/configs/xx_defconfig"! 这个问题常见在没有设置好架构的makefile中 ...

  2. cdqz2017-test1-数论 (BSGS + 二次剩余 + CRT)

    若m=0, 就是求n^2n ≡ x mod p (x--) 因为一定优解,所以x一定是p的二次剩余 令g为p的1个原根,且g^k ≡ x mod p 则k是偶数,证明k是偶数: 假设 g1^k1 ≡ ...

  3. Nginx 学习笔记(六)引入线程池 性能提升9倍

    原文地址:https://www.cnblogs.com/shitoufengkuang/p/4910333.html 一.前言 1.Nignx版本:1.7.11 以上 2.NGINX采用了异步.事件 ...

  4. IntelliJ IDEA 2017 配置Tomcat 运行Web项目

    以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多 ...

  5. Docker-02 无人值守安装 docker

    #!/bin/bash # # 无人值守安装 docker # # # .关闭SELinux # setenforce sed -i 's/SELINUX=enforcinf/SELINUX=disa ...

  6. linux_网易云音乐安装

    使用命令安装一些基本包$ sudo apt install devscripts equivs git

  7. springboot(二十二)spring-boot使用AOP

    https://blog.csdn.net/w05980598/article/details/79053209

  8. 通用化NPOI导出xls

    前言:在导出到xls时有一些通用的元素,比如标题,列标题,内容区域,求和行,但每个xls多少有点不同,为了处理这个问题,可以使用delegate实现,这样可以把差异部分单独处理. //为了处理计算和之 ...

  9. 十三、u-boot 调试-- NOR FLASH 支持

    13.1 问题现象 在烧写进去的u-boot 中 Flash 并没有显示实际大小,需要进行修改. 13.2 问题定位过程 13.2.1 关键字搜索 Flash: 此关键字在 Board_r.c (co ...

  10. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week2, Neural Networks Basics

    Logistic regression Cost function for logistic regression Gradient Descent 接下来主要讲 Vectorization Logi ...