模板方法在Spring事务中的应用
事务对于我们来讲不并陌生,也是在实际应用中一直都在使用。在JDBC中,事务大致的使用结构如下:
开启事务
业务逻辑处理
提交事务
Spring只是对事务进行了扩展和封装使用,现在看看在内部它是如何工作的。
1. PlatformTransactionManager
PlatformTransactionManager是一个接口,它定义的方法如下:
// 获取事务TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // 提交事务 void commit(TransactionStatus status) throws TransactionException; // 回滚事务 void rollback(TransactionStatus status) throws TransactionException;
看到这个类的定义,基本上对事务的功能有一个初步的掌握,完全就是平时写事务步骤的关键方法啊!
2. AbstractPlatformTransactionManager
AbstractPlatformTransactionManager它实现了PlatformTransactionManager接口。但是这个抽象类只是定义了一个骨架,抽象出
doBegin(),doCommit(),doRollback()这三个抽象方法让子类去实现。
3. DataSourceTransactionManager
DataSourceTransactionManager是JDBC事务的实现类,它继承了AbstractPlatformTransactionManager类,并实现了doBegin(),doCommit(),doRollback()这三个关键的方法。
DataSourceTransactionManager有一个成员是DataSource,在事务配置时,要传这个属性过去。
doBegin() 中有一个关键的代码:con.setAutoCommit(false);
doCommit() 中有一个关键的代码:con.commit();
doRollback() 中有一个关键的代码:con.rollback();
看到这里,有没有很熟悉的感觉呢?!
4. TransactionTemplate
TransactionTemplate是手动事务编程的模板类,它是如何来完成的呢?它有一个重要的方法:execute()方法,它里面定义了事务操作的基本骨架,剔除一些异常处理的代码,看看最关键的代码并作注释。
public <T> T execute(TransactionCallback<T> action) throws TransactionException { // 这里主要调用了doBegin()方法 TransactionStatus status = this.transactionManager.getTransaction(this); T result; try { // 回调子类中的具体实现逻辑,处理业务逻辑 result = action.doInTransaction(status); }catch(Exception e){ // 调用doRollback()方法 rollbackOnException(status, ex); } // 调用doCommit()方法 this.transactionManager.commit(status); return result; }
看完了应该明白了模板方法在它里面的应用了吧。
模板方法在Spring事务中的应用相关推荐
- spring事务中的超时时间很多人都不理解
在spring中如何使用事务是一个很大的问题,其中有一个我需要在这篇文章中着重讲解一下,就是spring事务中的超时时间问题,很多同学不知道如何才能是这个超时时间生效,导致在使用过程中出现各种各样的问 ...
- java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...
#1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发现加锁后并没有控制住库存线程安全的问题,导致库存仍被超发. 先简单 ...
- 关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题
为什么80%的码农都做不了架构师?>>> #1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发 ...
- spring 事务中先删除再插入后唯一键冲突 delete then insert duplicate key
今天在同事碰到了一个比较有意思的问题,为了实现某个场景中的数据更新和删除,想通过 delete all entities 然后 insert new entities 的方式减少判断数据是否删除的操作 ...
- Spring事务管理中异常回滚知识点总结
记录总结Spring核心知识点:事务使用与它的传播机制 目录 前言 问题场景 Spring 管理事务的原理 MySQL中的事务管理 JDBC中的事务管理 Spring 中的事务管理 Spring中的事 ...
- 事务里面捕获异常_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?". 事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组 ...
- 事务回滚什么意思 try_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...
- 三问Spring事务:解决什么问题?如何解决?存在什么问题?
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...
- Spring事务概述
Spring框架提供统一的事务抽象,通过统一的编程模型使得应用程序可以很容易地在不同的事务框架之间进行切换. 在学习Spring事务前,先对数据库事务进行简单的介绍. 数据库事务简介 构成单一逻辑工作 ...
最新文章
- C#获取枚举描述代码
- mysql开创_MySQL创始人打造MariaDB 全面兼容MySQL 5.1
- pandas基本数据处理
- 解决设备升级至Android 4.2.2之后,可以连接但无法调试的问题
- 利用Mesos构建多任务调度系统
- Ubuntu中搭建ICE服务器(Coturn)
- DirectX 9 游戏汉化详解
- 清明上河图密码2笔记
- 【React】利用Dooringx快速制作H5搭建平台
- Win10 笔记本 共享 wifi 热点
- 偏微分方程1-常微分方程求解方法回顾
- python读取定位_如何使用python定位和读取Data Matrix代码
- bzoj1050: [HAOI2006]旅行comf
- php实现登录验证码_PHP实现登录验证码功能
- 触摸IC XTP2046 驱动笔记
- 深信服easyconnect下载_深信服新一代数据防泄密解决方案荣登数安天下榜中榜
- 近年来计算机的就业情况图表,巧用Excel函数实现动态图表的制作
- 现在是学计算机好还是通信工程好,工科类大学“专业”排行榜,通信工程无缘前5,这个越来越吃香...
- atthesametime啥意思_at the same time和on the same time有什么区别吗
- 找实习经历分享(一)
热门文章
- C++class类(II)
- C++STL的deque容器
- 经典C语言程序100例之七一
- c语言文本按行分配数组元素,【转】C语言中动态分配数组
- java只有值传递_面试官:为什么 Java 中只有值传递?
- 「Python-Pycharm」zipimport.ZipImportError: can‘t decompress data; zlib not available
- 08_索引与切片,Indexing,Python风格的索引,index_select()选择特定索引,使用...索引任意多的维度,使用mask索引,take索引
- Mongodb参数详解(参考:http://blog.csdn.net/freebird_lb/article/details/8229567)
- Solr Admin中带高亮查询,带score查询;edismax的mm查询
- Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用