一、环境搭建

  【1】导包

  【2】编写配置文件

    1. 配置扫描注解

    2. 引入外部资源文件

    3. 配置数据源

    4. 配置JdbcTemplate 操作数据库

    5. 配置声明式事务

      5.1 Spring 提供了事务管理器,先配置管理器。DataSourceTransactionManager。

      5.2 控住数据源

      

      5.3 开启基于注解的声明式事务。依赖 tx 名称空间。

      

      5.4 给事务方法加注解。@Transactional

  【3】测试

二、@Transactional 注解

  

  timeout-int(秒为单位):超时,事务超出指定执行时长后自动终止并回滚;

  readOnly-boolean:设置事务为只读事务;可以进行事务优化;readOnly=true:加快查询速度;不用管事务那一堆操作了。

  isolation-Isolation:事务的隔离级别;

  propagation-Propagation:事务的传播行为;

  noRollbackFor:哪些异常事务可以不回滚;(可以让原来默认回滚的异常给他不回滚);

  rollbackFor:原本不回滚(原本编译时异常是不回滚的)的异常指定让其回滚。

  小知识:异常的分类:

    【1】运行时异常:可以不用处理,默认都回滚。

    【2】编译时异常:要么 try-catch,要么在方法声明上 throws,默认不会滚。

三、隔离级别

  【1】数据库事务并发问题:假设现在有两个事务:Transaction01和Transaction02并发执行。  

  ① 脏读

    [1]Transaction01将某条记录的AGE值从20修改为30。

    [2]Transaction02读取了Transaction01更新后的值:30

    [3]Transaction01回滚,AGE值恢复到了20。

    [4]Transaction02读取到的30就是一个无效的值。

  ② 不可重复读

    [1]Transaction01读取了AGE值为20。

    [2]Transaction02将AGE值修改为30。

    [3]Transaction01再次读取AGE值为30,和第一次读取不一致。

  ③ 幻读

    [1]Transaction01读取了STUDENT表中的一部分数据。

    [2]Transaction02向STUDENT表中插入了新的行。

    [3]Transaction01读取了STUDENT表时,多出了一些行。

  【2】隔离级别

    数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。一个事务与其他事务隔离的程度称为隔离级别。SQL标准中规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。  

    ①读未提交:READ UNCOMMITTED

      允许Transaction01读取Transaction02未提交的修改。

    ②读已提交:READ COMMITTED

      要求Transaction01只能读取Transaction02已提交的修改。

    ③可重复读:REPEATABLE READ

      确保Transaction01可以多次从一个字段中读取到相同的值,即Transaction01执行期间禁止其它事务对这个字段进行更新。

    ④串行化:SERIALIZABLE(一万年用不到)

      确保Transaction01可以多次从一个表中读取到相同的行,在Transaction01执行期间,禁止其它事务对这个表进行添加、更新、删除操作。可以避免任何并发问题,但性能十分低下。

  【3】在 mysql 下演示隔离级别

    1. 几个和隔离级别相关的命令

      1.1 查询隔离级别

        ① 查询当前会话的隔离级别

        SELECT @@session.tx_isolation;

        SELECT @@tx_isolation;

        @ 查询全局的隔离级别

        SELECT @@global.tx_isolation;

      1.2 修改隔离级别

      SET  [ SESSION  |  GLOBAL ]   TRANSACTION    ISOLATION   LEVEL   {READ    UNCOMMITTED   |   READ    COMMITTED   |   REPEATABLE    READ  |  SERIALIZABLE} ;

      例如:将当前会话的隔离级别改为读未提交:SET   SESSION   TRANSACTION   ISOLATION   LEVEL   READ   UNCOMMITTED;

      1.3 事务操作

      开启事务:start transaction;
      提交事务:commit;
      回滚事务:rollback;

    2. 读未提交

      

    3. 读已提交

      

    4. 可重复读

      

四、传播行为(propagation:传播)

    传播行为:事务的传播+事务的行为,如果有多个事务进行嵌套运行,子事务是否要和大事务共用一个事务。

    事务传播属性可以在@Transactional 注解的 propagation 属性中定义,Spring 定义了 7 中传播行为。

    

五、基于 XML 配置的事务

    基于 xml 配置的事务;依赖 tx 名称空间和 aop 名称空间。

  【1】Spring中提供事务管理器(事务切面),配置这个事务管理器。

    

  【2】告诉 Spring 哪些方法是事务方法(事务切面按照我们的切入点表达式去切入事务方法)

    

  【3】配置出事务方法

     

Spring 笔记三 事务的更多相关文章

  1. Spring笔记:事务管理

    Spring笔记:事务管理 事务管理 Spring事务管理是通过SpringAOP去实现的.默认情况下Spring在执行方法抛出异常后,引发事务回顾,当然你可以用拦截器或者配置去改变它们. 这部门内容 ...

  2. spring笔记(三)

    Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的“事务控制”, 可以用aop实现! 即只需要写一次,运行时候动 ...

  3. Spring笔记三

    Spring-03 1. AOP 1.1 概念 ​ AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...

  4. Spring笔记(三)AOP前篇之动态代理

    AOP思想是将程序中的业务代码与服务代码进行分离,在运行时进行结合.比较强调程序的层次结构,是一种面向切面的编程.而在AOP实现的底层主要用到了动态代理,而动态代理又分为JDK动态代理和CGLIB动态 ...

  5. spring笔记--事务管理之声明式事务

    事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使 ...

  6. Spring笔记04_AOP注解开发_模板_事务

    目录 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 1.2 Spring的AOP的注解通知类型 1.2.1 @Before:前置通知 1.2.2 @A ...

  7. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  8. Spring.Net学习笔记(7)-事务

    一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...

  9. spring jdbc、事务(三)

    spring整合jdbc spring中提供了一个可以操作数据库的对象(JDBCTemplate),对象封装了jdbc技术. 1.使用spring整合jdbc需要jdbc驱动.c3p0连接池.spri ...

  10. (三)Spring框架之事务管理

    一.编程式事务管理 Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,事务管理器接口PlatformT ...

随机推荐

  1. CocosCreator基于jenkins自动构建

    1.新建Item,输入名称后选择Freestyle project后点击确定 2.配置项目,自定义工作目录 3.配置源码管理和要摘取的分支 4.构建触发器选择github触发 5.构建选择执行wind ...

  2. vs code for macOS的安装

    参考下载链接:http://www.pc6.com/mac/147684.html 汉化方法: 中文设置方法(如下图)在插件设置的搜索栏中输入"chinese",选择第一个简体中文 ...

  3. div 自动高度

    问题: 一个页面分上下二部分,上部分高度是固定不变的,要求下部分高度自动占满屏幕,如何实现? 第一感觉是准备用 JS 实现. 今天发现一个用 CSS 实现的方法 position: fixed; bo ...

  4. JSP课设:学生选课系统(附源码+调试)

    JSP学生选课管理系统学生选课管理系统功能概述(1)登录模块分为两种角色:学生角色.教师角色 (2)教师模块:选课管理功能为对课程信息(课程编号.名称.学分)进行添加.修改.删除操作:学生信息功能对学 ...

  5. js 判断gps是否超出设定范围

    var CKposition = { //经纬度转换成三角函数中度分表形式 rad: function (d) { return d * Math.PI / 180.0; }, // 根据经纬度计算距 ...

  6. OPENCV3 API

    图像翻转 void flip(InputArray src, OutputArray dst, int flipCode); flipCode: 0: x 轴翻转 1: y 轴翻转 <0: x, ...

  7. 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.

    完成warning和报错信息如下. 通过报错信息提示,锁定cwebp-bin,在waring中发现有提示说要更新至7或更高版本. 解决方案:在package.json中,将cwebp-bin设置版本为 ...

  8. WC2023 游记

    不是很会写游记,随便写写吧. 一些附件 讲课资料合集(压缩后 \(\rm 31MB\))太大了,可以去 U 群下载. 由于后面很多乐子,我把相关内容打包成 zip 上传上来了. 乐子合集下载链接.(这 ...

  9. fastadmin添加自定义按钮

    问题:关于fastadmin框架列表页面自定义按钮功能 案例:自定义一个同步数据的按钮 <a href="javascript:;" class="btn btn- ...

  10. 洛谷P4342 [IOI1998]Polygon

    题目 https://www.luogu.com.cn/problem/P4342 我会做IOI题辣 思路 算法设计与分析的课堂例题. 首先这是一个环状DP,那么根据老套路,破环成链.发现要求的东西也 ...