Spring 笔记三 事务
一、环境搭建
【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 笔记三 事务的更多相关文章
- Spring笔记:事务管理
Spring笔记:事务管理 事务管理 Spring事务管理是通过SpringAOP去实现的.默认情况下Spring在执行方法抛出异常后,引发事务回顾,当然你可以用拦截器或者配置去改变它们. 这部门内容 ...
- spring笔记(三)
Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的“事务控制”, 可以用aop实现! 即只需要写一次,运行时候动 ...
- Spring笔记三
Spring-03 1. AOP 1.1 概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...
- Spring笔记(三)AOP前篇之动态代理
AOP思想是将程序中的业务代码与服务代码进行分离,在运行时进行结合.比较强调程序的层次结构,是一种面向切面的编程.而在AOP实现的底层主要用到了动态代理,而动态代理又分为JDK动态代理和CGLIB动态 ...
- spring笔记--事务管理之声明式事务
事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使 ...
- Spring笔记04_AOP注解开发_模板_事务
目录 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 1.2 Spring的AOP的注解通知类型 1.2.1 @Before:前置通知 1.2.2 @A ...
- spring学习(三) ———— spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- Spring.Net学习笔记(7)-事务
一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...
- spring jdbc、事务(三)
spring整合jdbc spring中提供了一个可以操作数据库的对象(JDBCTemplate),对象封装了jdbc技术. 1.使用spring整合jdbc需要jdbc驱动.c3p0连接池.spri ...
- (三)Spring框架之事务管理
一.编程式事务管理 Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,事务管理器接口PlatformT ...
随机推荐
- Docker 使用阿里云加速拉取官方镜像
首先登陆阿里云容器镜像服务控制台,在左侧导航栏选择镜像工具 > 镜像加速器,在镜像加速器页面获取镜像加速地址. 例如: 加速器地址:[系统分配前缀].mirror.aliyuncs.com 配置 ...
- Spring-XML文件与注解
(一)基于XML的使用 (二)基于注解和XML的混合使用
- 本地启动https服务器
如果是vue-cli3项目,直接在vue.config.js中设置如下即可: devServer: { https: true } 如果是express项目,则根据这篇文章来操作即可:https:// ...
- ubuntu 16.04 Chrome安装
打开终端 输入 命令1:sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list ...
- 记录坑:Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定
问题:用定时器 setInterval()做个滚动通知的动画,浏览器最小化时,定时器 setInterval()失效了,导致滚动条重叠了 可能原因: js代码不稳定 Chrome谷歌浏览器最小化和页面 ...
- HTML+CSS+JS制作一个黑灰色简约时钟
HTML+CSS+JS制作一个黑灰色简约时钟 1. 效果图: 2. 特点:这次借鉴了网络上的代码,利用JS动态创建元素,减少html语句的数量,也便于与vue.react等语言进行结合. 3. 代码实 ...
- 虚拟机重置root用户密码
虚拟机root用户重置密码 在打开虚拟机 在出现下图界面的时候按 e 进入管理界面 e要快速按 不然就会直接进入虚拟机 然后找到 UTF-8 在后面添加 rd.break 输入完后按 Ctrl+x 跳 ...
- WPFGroupBox控件自定义
先上效果图 直接上代码(直接在Window.Resources里面添加这段代码) <Style TargetType="GroupBox"> <Setter Pr ...
- FSCapture怎么取色
启动软件后 点击setting->Screen color Picker 此时箭头会变为一个吸管形状, 选择要吸取的颜色,点击鼠标左键 出现如图所示 完了复制这个十六进制颜色值
- Java的访问控制修饰符有哪些?各有什么访问权限?请对照第7页ppt的表格分别写程序验证。
Java的访问控制修饰符有哪些? JAVA主要有两类修饰符: 访问控制修饰符 : default, public , protected, private 非访问控制修饰符 : final, abst ...