Spring学习之事务注解@Transactional
今天学习spring中的事务注解,在学习Spring注解事务之前需要明白一些事务的基本概念:
事务:并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务数据库能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
事务隔离级别:在并发处理数据中,为了保持数据的完整性和正确性,而执行的操作数据方式。
脏读 :一个事务读取到另一事务未提交的更新数据。
幻读:一个事务读到另一个事务已提交的insert数据。
不可重复读: 是指在一个事务内多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据就有可能不一样的。
Spring事务执行机制:
1.@Transactional:只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.
2.@Transactional:默认情况下遇见RuntimeException类型的异常会执行回滚,Exception类型的异常不执行回滚。
3.@Transactional(rollbackFor=Exception.class) :指定Exception类型的异常进行回滚。
4.@Transactional(noRollbackFor=Exception.class):指定RuntimeException类型不进行回滚。
Spring事务传播行为:
1.@Transactional(propagation=Propagation.REQUIRED) :当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。(这个比较常用)
2.@Transactional(propagation=Propagation.PROPAGATION_SUPPORTS) :当前没有事务,则以非事务方式执行,如果有事务则以事务方式执行。
3.@Transactional(propagation=Propagation.PROPAGATION_MANDATORY) :使用当前的事务,如果当前没有事务,就抛出异常。
4.@Transactional(propagation=Propagation.PROPAGATION_REQUIRES_NEW) :新建事务,如果当前存在事务,把当前事务挂起。
5.@Transactional(propagation=Propagation.PROPAGATION_NOT_SUPPORTED) :以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.@Transactional(propagation=Propagation.PROPAGATION_NEVER) :以非事务方式执行,如果当前存在事务,则抛出异常。
7.@Transactional(propagation=Propagation.PROPAGATION_NESTED) :如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作。(这个比较常用)
Spring事务隔离级别:
@Transactional(isolation = Isolation.ISOLATION_DEFAULT):这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
@Transactional(isolation = Isolation.ISOLATION_READ_UNCOMMITTED):该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据,该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别
@Transactional(isolation = Isolation.ISOLATION_READ_COMMITTED):该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
@Transactional(isolation = Isolation.ISOLATION_REPEATABLE_READ):该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
@Transactional(isolation = Isolation.ISOLATION_SERIALIZABLE):所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
常用数据库的隔离级别:
MYSQL:默认为REPEATABLE_READ
ORACLE:默认隔离级别是READ_COMMITTED
PostgreSQL:默认隔离级别是READ_COMMITTED
Spring学习之事务注解@Transactional的更多相关文章
- Spring学习8-Spring事务管理
http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...
- 五(一)、spring 声明式事务注解配置
一.事务概述: 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用:比如 用户购买图书:购买动作之前需要确认 ①图书的数量是否足够:②用户账号余额是否足够 ...
- 《四 spring源码》spring的事务注解@Transactional 原理分析
先了解什么是注解 注解 Jdk1.5新增新技术,注解.很多框架为了简化代码,都会提供有些注解.可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件. 注解不会也不能影 ...
- 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
作者:Mint6 来源:http://39sd.cn/53D5D Java阿里巴巴规范提示:方法[edit]需要在Transactional注解指定rollbackFor或者在方法中显示的rollba ...
- SpringBoot事务注解@Transactional
SpringBoot提供了非常方便的事务操作,通过注解就可以实现事务的回滚,非常方便快捷,下面我们就说一下如何进行事务操作. 1. 事务说明 在Spring中,事务有两种实现方式,分别是编程式事务管理 ...
- Spring 学习7 -事务
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是 ...
- Spring学习_day03_事务
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! Spring_day03 一.事务 1.1 事务 事务 ...
- Springboot 事务注解--- @Transactional
spring boot @Transactional事物处理 spring boot 添加事物使用 @Transactional注解 简单使用 在启动类上方添加 @EnableTransacti ...
- Spring学习8-Spring事务管理(编程式事务管理)
一.Spring事务的相关知识 1.事务是指一系列独立的操作,但在概念上具有原子性. 比如转账:A账号-100, B账号+100,完成.这两个操作独立是没问题的. 但在逻辑上,要么全部完成,要么一 ...
随机推荐
- Eclipse常用配置及常用快捷键
Eclipse常用配置 ① 对编辑窗口视图的字体大小和字体类型进行配置; ②对控制台和xml文本字体大小和字体类型进行设置; ③ 设置.修改eclipse所使用的jdk环境; ④ 设置.修改当前对ja ...
- [luoguP3231] [HNOI2013]消毒(最小点覆盖 + 状压)
传送门 考虑贪心,控制某一维为1,另两位最大是最优的,也就是一次选一个厚度为1的面 那么对于每个点,可以有3种面是可以选到它的 然后gg 考虑二维的状态,一个平面,有些点,一次选一行或一列最优 那么每 ...
- 微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)
题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, your program ...
- mybatis foreach Map(String,List)类型
<select id="queryList" resultType="com.performancetest.modules.ptest.entity.Stress ...
- 'Add Solution': A timeout has occurred while invoking commands in SharePoint host process.
一.问题描述: 在部署SharePoint solution的时候,出现Time out 的问题,错误提示: Error occurred in deployment step 'Add Soluti ...
- 【CF1017C】The Phone Number(构造)
题意:要求构造一个1-n的排列,使得它的LIS+LDS最小 n<=1e5 思路:一个百度之星时候从LYY处听来的结论:1-n随机排列的LIS期望是根号级别的 考虑将LIS与LDS都构造成根号级别 ...
- 用node写的一个后台框架
server.js var http=require('http') var handleUrl=require('./handleUrl') var config = require('./conf ...
- 标准C程序设计七---41
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 35深入理解C指针之---结构体基础
一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...
- PHP连接MySQL报错"No such file or directory"的解决办法
好下面说一下连接MYSQL数据库时报错的解决办法. 1,首先确定是mysql_connect()和mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No ...