事务一般是指数据库事务,是指作为一个程序执行单元执行的一系列操作,要么完全执行,要么完全不执行。事务就是判断以结果为导向的标准。

一.spring的特性(ACID)

(1).原子性(atomicity)
       原子性就是一个不可分割的工作单元。简单的说,就是指事务包含的所有操作要么全部成功,要么全部失败回滚。因此事务的操作如果成功就必须要完全应用到数据库,如果失败则不能对数据库有任何影响。
    (2).一致性(consistency)
     一致性就是事务必须是使一个一致性状态变成另一个状态,也就是说一个书屋执行之前和执行之后都必须处于一致性状态。那转账来说,假设用户A和用户B两者的钱加起来一共是5000.那么不管A和B之间如何转账,转多少次,事务结束后两者的钱加起来还是5000。
    (3).隔离性(isolation)
     隔离性就是一个事务的执行不能被另一个事务干扰。当多个用户并发访问数据库操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,并发事务之间要相互隔离。
  (4).持久性(durability)
      持久性是指一个事务一旦被提交了,那么对数据库数据的改变就是永久的。即使是在数据系统遇到故障的情况下也不会丢失提交事务的操作。

二.spring的隔离级别

* 脏读:一个事务读到了另一个事务未提交的数据
* 不可重复读:一个事务读到另一个事务已经提交(update)的数据导致多次查询结果不一致
* 虚幻读:一个事务读到了另一个事务已经提交(insert)的数据导致多次查询结果不一致。

对于sqlserver和oracle的默认隔离级别是RC,mysql的默认隔离级别是RR。

三.spring的传播特性(事务有7中传播机制 )

对于spring的代码我有写过一个测试的小demo,在demo里面有记录如何添加的事务,同时也打印了日志记录最后结果,可以任意扩展。

由于博客园上传代码比较麻烦,我就上传到CSDN上的,想测试的可以去下载。

网址:https://download.csdn.net/download/zj520_/12064006

四.spring的注意事项

1. 出现Exception是无法回滚的,只有抛出RuntimeException和Error异常时才能回滚。 2. 在事务代码中捕获了异常,是无法进行回滚的。
3. 如果是使用的spring+mvc模式。并且spring和mvc都扫描了service层(事务处理层),事务不生效。因为spring会有限加载mvc的配置文件,而事务的配置基本上都是在spring中,因为spring的子容器先于父容器启动,造成在controller中注入service时还没有加载事务。
4. mysql的myISAM引擎,是不支持事务的,需要设置为innoDB模式。
5. 事务的开启必须放到listener里面加载,如果放到dispatchServlet的配置里面,事务不生效。
6. 如果在接口中使用@Transactional,只有JDK动态代理才能生效,CGLIB动态代理是不生效的,因为注解是不能继承的。

五.如果让Exception可以进行回滚呢?

方法1:@Transactional注解指定rollbackFor=Exception.class

方法2:让throw的自定义Exception继承RuntimeException

方法3:使用自定义注解,处理回滚Exception的问题:

@Transactional(rollbackFor=Exception.class)
public @interface DolTransactional {

}

spring事务代码实践的更多相关文章

  1. Spring 事务传播实践分析

    事务管理是应用系统开发中必不可少的一部分.事物将若干的数据库操作作为一个整体控制,一起成功或一起失败.事物有以下特性 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.   ...

  2. Spring事务源码阅读笔记

    1. 背景 本文主要介绍Spring声明式事务的实现原理及源码.对一些工作中的案例与事务源码中的参数进行总结. 2. 基本概念 2.1 基本名词解释 名词 概念 PlatformTransaction ...

  3. spring事务详解(一)初探事务

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 引子 很多 ...

  4. 一文带你认识Spring事务

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...

  5. Spring事务传播机制与隔离级别(转)

    Spring事务传播机制与隔离级别 博客分类: Spring   转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...

  6. Spring事务管理入门与进阶

    事务管理 一个数据库事务是一个单一的工作单元操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,事务管理可以确保数据完整性和一致性.事务具有以下四个关键特性分别是 ACI ...

  7. Spring事务传播属性有那么难理解吗?

    学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...

  8. Spring 事务 属性 详细

    学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...

  9. 理解 spring 事务传播行为与数据隔离级别

    事务,是为了保障逻辑处理的原子性.一致性.隔离性.永久性. 通过事务控制,可以避免因为逻辑处理失败而导致产生脏数据等等一系列的问题. 事务有两个重要特性: 事务的传播行为 数据隔离级别 1.事务传播行 ...

随机推荐

  1. Go语言学习笔记(三)

    一.浮点数 1.概述 浮点类型用于存储带有小数点的数字 一个整数数值可以赋值给浮点类型但是一个整型变量不可以赋值给浮点类型 浮点数进行运算的结果是浮点数 Go语言中浮点类型有两个 float32 fl ...

  2. 投资人分享答疑----HHR计划----以太直播课第三课

    分享大纲:(祥峰投资) 一,投资人会看什么: 1,赛道定位:“生意”还是“独角兽-to be”? 2,如何退出?上市还是收购? 3,  团队能力,愿景力 4,壁垒:数据和价值 5,价格 二,融资需要准 ...

  3. P1029最大公约数和最小公倍数

    P1029最大公约数和最小公倍数 #include <iostream> #include <cmath> #include <algorithm> #define ...

  4. luogu P2280 激光炸弹(二维前缀和)

    由题给的xi, yi范围,可以建立二维地图maze[i][j],记录i j范围上的所有目标的价值总和 即有maze[xi][yi] += wi 然后接下来的目标就是求出该二维数组的前缀和 可得到前缀和 ...

  5. Spring Cloud Hystrix 请求熔断与服务降级

    在Java中,每一个HTTP请求都会开启一个新线程.而下游服务挂了或者网络不可达,通常线程会阻塞住,直到Timeout.你想想看,如果并发量多一点,这些阻塞的线程就会占用大量的资源,很有可能把自己本身 ...

  6. java使用netty模拟实现一个类dubbo的分布式服务调用框架

    本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...

  7. Excel使用小技巧

    1.Excel随机设置单元格的内容为整数0或1: 在单元格中写公式:  =ROUND(RAND(),0) 2.设置某个单元格的值为1或0,根据其他3个单元格的值为0或1来确定: 在该单元格中写公式: ...

  8. CentOS7编译安装httpd-2.4.41

    安装参考环境: CentOS Linux release 7.5.1804 (Core) 一.安装依赖包 httpd安装的依赖包 # yum -y install pcre-devel # yum - ...

  9. 列表推导式、生成器表达式以及zip()max()max()/min()sum()sort()map()filter()的用法

    列表推导式: 基本格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] #out_exp_res: 列表生成元素 ...

  10. 粘性session和非粘性session

             粘性session就是指,apache服务器会把某个用户的请求,交给tomcat集群中的一个节点,以后此节点就负责该保存该用户的session,如果此节点挂掉,那么该用户的sessi ...