【Spring】事务的实现方式
原文链接:https://tidyko.com/posts/c87c55c4.html
1 初步理解
- 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
- 一致性(Consistency):不管操作是成功还是失败,事务必须保持数据前后的一致性,比如A给B转账,两个人的总金额合计2000块,转账前与转账后,两人的总金额合计都必须是2000块。
- 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏,避免出现脏读,幻读,不可重复读的状况。比如多笔转账同时进行了操作,每笔转账的事务应该是隔离的。
- 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
2 核心接口

2.1 平台事务管理器(PlatformTransactionManager)
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
2.2 基础事务属性定义(TransactionDefinition)

2.2.1 传播行为
|
传播行为
|
含义
|
|
PROPAGATION_REQUIRED
|
表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务
|
|
PROPAGATION_SUPPORTS
|
表示当前方法不需要事务上下文,但是如果存在当前事务的话,那么该方法会在这个事务中运行
|
|
PROPAGATION_MANDATORY
|
表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常
|
|
PROPAGATION_REQUIRED_NEW
|
表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager
|
|
PROPAGATION_NOT_SUPPORTED
|
表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager
|
|
PROPAGATION_NEVER
|
表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常
|
|
PROPAGATION_NESTED
|
表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。如果当前事务不存在,那么其行为与PROPAGATION_REQUIRED一样。注意各厂商对这种传播行为的支持是有所差异的。可以参考资源管理器的文档来确认它们是否支持嵌套事务
|
2.2.2 隔离级别
|
隔离级别
|
含义
|
|
ISOLATION_DEFAULT
|
使用后端数据库默认的隔离级别
|
|
ISOLATION_READ_UNCOMMITTED
|
最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
|
|
ISOLATION_READ_COMMITTED
|
允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
|
|
ISOLATION_REPEATABLE_READ
|
对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
|
|
ISOLATION_SERIALIZABLE
|
最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的
|
2.2.3 只读
2.2.4 事务超时
2.2.5 回滚规则
2.3 事务状态
3 事务的实现方式
3.1 编程式和声明式事务的区别
【Spring】事务的实现方式的更多相关文章
- 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...
- spring事务的开启方式(编程式和声明式)
1.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManager,与模版类Tran ...
- Spring事务管理实现方式之编程式事务与声明式事务详解(转)
原文:https://blog.csdn.net/liaohaojian/article/details/70139151 编程式事务 编码方式实现事务管理(代码演示为JDBC事务管理) Spring ...
- spring事务管理实现方式
声明式事务 tx及aop配置,利于管理,耦合性低,可读性低 @Transactional注解,不利管理,耦合性高,可读性高 编程式事务 TransactionTemplate类,spring推荐方法 ...
- spring 事务:注解方式
(1) .<context:component-scan base-package="*.*" /> 该配置隐式注册了多个对注解进行解析的处理器,如: Autowire ...
- Spring事务的开启方式
1.通过注解方式@Transactional @Transactional(rollbackForClassName = { "Exception", "RuntimeE ...
- 事务管理(下) 配置spring事务管理的几种方式(声明式事务)
配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...
- Spring事务配置的五种方式(转载)
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...
- Spring事务配置的五种方式
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...
- spring 事务管理方式及配置
1.Spring声明式事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之前对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的 ...
随机推荐
- Python-8-print和import进阶
1.打印多个参数 用逗号隔开: >>> print('Age:', 42) Age: 42 参数之间自动插入了一个空格字符 >>> name = 'Gumby' & ...
- JS 检测字符串是否还有某个字符
function filer(s) { var str = "字符串"; if (str.indexOf(s) == -1) { alert("没有"); } ...
- guacamole的复制粘贴
一.发送中文或文本(针对开发环境,生产环境不需变动) 官方下载的完整版js缺失了一部分关于粘贴板的代码,调用setclipboard方法,将外部内容复制到粘贴板的时候,提示方法不存在.需要补齐这部分源 ...
- Struts2 拦截器(Interceptor )原理和配置
http://blog.csdn.net/kingmax54212008/article/details/51777851
- 算法导论课后习题解答 第一部分 练习1.1-1->1.1-5
很高兴能和大家一起共同学习算法导论这本书.笔者将在业余时间把算法导论后面的题解以博文的形式展现出来希望能得到大家的支持谢谢.如果有可能我会做一些教学视频免费的供大家观看. 练习题选自算法导论中文第三版 ...
- 第一天课程-html基础
一.课程内容: 1.安装需要的软件 安装了三个软件:Adobe Dreamweaver,EmEditor,FSCapture.分别是前端开发软件.功能强大的文本编辑器,截图录屏软件 2.了解文件格式. ...
- Java实现将GBK编码格式的文件夹中所有文件都转化为UTF-8格式的文件,编码格式转化
package CodeConvert; import Java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- 在使用添加按钮给table插入新的一行时遇见的问题总结及处理方法
添加按钮的功能:点击添加按钮之后完成添加新的一行. 遇见的问题:当多次点击添加按钮生成新的多行之后,生成的每行内部按钮的保存按钮点击事件出现最晚添加的一行的行内保存点击事件执行一次,倒数第二次添加的行 ...
- SQL必知必会-笔记
一.数据库/数据表 数据库(DATABASE):存储有组织的数据的容器; 数据库管理系统(DBMS):数据库软件.开发者通过 DBMS 操纵 DATABASE 表(TABLE):表是一种结构化的文件, ...
- jQuery动态追加移除CSS样式
jQuery基础知识,动态添加删除CSS样式 <!DOCTYPE html> <html lang="en"> <head> <meta ...