为什么80%的码农都做不了架构师?>>>   

一 简介

spring中提供了三种事务管理的方法。

  1. 编程式事务管理 :亦即自己编写事务管理的代码,通过注入获取到spring中的事务管理器对象后,通过该对象来实现对事务的管理。

  2. 声明式事务管理之配置代理对象 :即为需要配置事务管理的类配置一个代理类,通过代理类来进行事务管理的相关操作。

  3. 声明式事务管理之使用aop进行事务操作 :动态生成代理类进行事务管理的相关操作。

二 配置与使用

0 配置事务管理器

在spring中对事务的操作都必须配置一个事务管理器,这个事务管理器最终会被注入到相关的类中使我们可以对事务进行操作,此处的事务主要指的是对数据库的事务,因此事务管理器配置时必须为其配置直接的或间接的可以操作数据库连接的对象。

1 使用SpringJdbc时,事务管理器要注入一个名为dataSource数据源对象,此处配置的是c3p0连接池,连接池相关参数置于src目录下的jdbc.properties配置文件中,配置信息如下

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=123456

在beans.xml文件中的配置

<!-- 获取到配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 获取配置文件中的相关参数 --><property name="driverClass" value="${jdbc.driverClass}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源 --><property name="dataSource" ref="dataSource"/>
</bean>

2 使用hibernate3时,事务管理器要注入一个名为sessionFactory的工厂对象,在beans.xml文件中配置如下

<!-- 配置sessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean>
1 编程式事务管理
1 在beans.xml中
<!-- 配置事务管理模板:spring为简化事务管理的代码而提供的模板 -->
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager"></property>
</bean>
2 为需要使用到事务的地方注入事务管理器模板类
<bean id="accountService" class="com.service.impl.AccountServiceImpl"><property name="ad" ref="accountDao"/><property name="tt" ref="transactionTemplate"/>
</bean>
3 使用方法:调用transactionTemplate对象的execute(TransactionCallback<Object> action)方法,可以如下所示实现一个接口,将一组事件放入同个事务。
@Overridepublic void tranferMoney(String out, String in, double money) {System.out.println("AccountServiceImpl Method tranferMoney()");tt.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus arg0) {//两个事件放入同一事务,必须同时成功ad.outMoney(out, money);ad.inMoney(in, money);}});}

2 配置代理类

spring中提供了一个事务代理类,配置需配置需要被代理的类target,即需要进行事务管理的类,还有事务管理的相关参数

<!-- 配置代理类 -->
<bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="target" ref="accountService"/><property name="transactionManager" ref="txManager"/><property name="transactionAttributes"><props><!-- *PROPAGATION : 事务的传播行为*ISOLATION   : 事务的隔离级别*readOnly    : 只读* -Exception : 发生哪些异常回滚事务* +Exception : 发生哪些异常不回滚事务--><prop key="tranferMoney">PROPAGATION_REQUIRED</prop></props></property>
</bean>

然后使用时直接使用配置的这个代理类,而不是使用原先的类。

3 利用aop进行事务的操作
<!-- 配置事务增强 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- name            : 需要增强的方法名propagation     : 事务的传播行为isolation       : 事务的隔离级别read-only       : 只读rollback-for    : 发生哪些异常回滚no-rollback-for : 发生哪些异常不回滚--><tx:method name="tranferMoney" propagation="REQUIRED"/></tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config><aop:pointcut expression="execution(public * com.service.AccountService+.*(..))" id="pointcut"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>

这样,只要是匹配的方法在使用时会自动进行代理。

注解的方式

<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>在需要配置事务的类上加上注解
可以不设置参数,则认为是默认
@Transactional
或者如下般设置参数
@Transactional(propagation=Propagation.REQUIRED)

参考视频

慕课网 Spring事务管理

转载于:https://my.oschina.net/idaren/blog/639301

spring中的事务配置相关推荐

  1. Spring 3.1 事务配置

    版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring 3.1 事务配置 spring发的包最好用的是2.5.6:所依赖的包全部都有,可是后来的版本都缺这少那的,导致开发中遇到各种各样的问题 ...

  2. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  3. Spring(四)——AOP、Spring实现AOP、Spring整合Mybatis、Spring中的事务管理

    文章目录 1. 什么是AOP 2. 使用Spring实现AOP 2.1 使用Spring的API 接口实现 2.2 自定义实现 2.3 使用注解实现 3. 整合MyBatis 3.1 MyBatis- ...

  4. spring中aop事务

    文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...

  5. Spring中解决事务以及异步注解失效

    Spring中解决事务以及异步注解失效 一.重现@Transaction失效的场景 有如下业务场景,新增订单后,自动发送短信,下面的代码在同一个类中: @Transaction public void ...

  6. spring事务管理器的作用_【面试必问】Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  7. (转)Spring中的事务操作

    http://blog.csdn.net/yerenyuan_pku/article/details/70024364 事务的回顾 什么是事务 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么 ...

  8. 基于Spring中的事务管理机制

    什么是事务? 通俗理解,事务其实就是一系列指令的集合. 为什么要使用事务管理? 我们在实际业务场景中,经常会遇到数据频繁修改读取的问题.在同一时刻,不同的业务逻辑对同一个表数据进行修改,这种冲突很可能 ...

  9. java day60【 Spring 中的 JdbcTemplate[会用] 、Spring 中的事务控制 、Spring5 的新特性[了解] 】...

    第1章 Spring 中的 JdbcTemplate[会用] 1.1JdbcTemplate 概述 1.2JdbcTemplate 对象的创建 1.3spring 中配置数据源 1.3.1 环境搭建 ...

最新文章

  1. Spring Boot:自定义starter
  2. LibreOJ #6002. 「网络流 24 题」最小路径覆盖
  3. lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换
  4. oracle schema_oracle数据库全局统计更新
  5. p1198bzoj1012 最大数
  6. mysql报错22_运行 mysql 遇到的两个报错
  7. 移动硬盘加上密码_树莓派+Seafile+移动硬盘搭建私有云
  8. adams c语言,Adams2013编译C语言用户子程序生成dll超详细教程讲解
  9. Crackme 23
  10. 怎么做应力应变曲线_如何用Origin画应力应变曲线
  11. VMware 虚拟机安装黑屏问题
  12. Anaconda3 安装失败 failed to create menus
  13. FYI | Thomas Yeo的组在招博士和博后@新加坡国立
  14. 【译学】数据分析手册学习01: 导言、学习目标、指导原则
  15. 你知道数据运营日常主要工作吗?
  16. 标签管理--操作标签
  17. 6.6 在图表上显示最大值和最小值 [原创Excel教程]
  18. 计算机硬盘read,电脑硬盘一直吱吱的响的解决办法
  19. 基于Python新生报到系统设计与实现 开题报告
  20. 大数据分析师工资待遇怎么样?

热门文章

  1. react页面数据过多怎么办_性能!!让你的 React 组件跑得再快一点,收藏
  2. matlab 恶俗的缩写combntns()
  3. 连续时间傅里叶变换的性质(简介及推导)
  4. MongoDB 和 NoSQL简介
  5. Spring|AOP
  6. python实现终端3维数据可视化
  7. 2018年3月29日笔记
  8. log4j(四)——如何控制不同风格的日志信息的输出?
  9. ng-repeat支持的输入种类
  10. redis界面管理工具phpRedisAdmin 安装