Spring 5(五) 事务操作
五.事务操作
1.事务概念
1.1 什么是事务
事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败
典型场景:银行转账
*Iucy 转账 100 元给 mary*lucy 少 100,mary 多 100
1.2 事务四个特性(ACID)
原子性事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
一致性几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
持久性对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
2.搭建事务操作环境
创建数据库表,添加记录
创建 service,搭建 dao,完成对象创建和注入关系
service 注入 dao,在 dao 注入 JdbcTemplate,在 JdbcTemplate 注入 DataSource
在 dao 创建两个方法:多钱和少钱的方法,在 service 创建方法(转账的方法)
上面代码,如果正常执行没有问题的,但是如果代码执行过程中出现异常,有问题
上面问题如何解决呢?
使用事务进行解决
事务操作过程
3.Spring 事务管理介绍
事务添加到 JavaEE 三层结构里面 Service 层(业务逻辑层)
在 Spring 进行事务管理操作
有两种方式:编程式事务管理和声明式事务管理(使用)
声明式事务管理
基于注解方式
基于 xml 配置文件方式
在 Spring 进行声明式事务管理,底层使用 AOP
Spring 事务管理 API
提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
4.注解声明式事务管理
在 spring 配置文件配置事务管理器
在 spring 配置文件,开启事务注解
在 spring 配置文件引入名称空间 bx
开启事务注解
在 service 类上面(获取 service 类里面方法上面)添加事务注解
@Transactional,这个注解添加到类上面,也可以添加方法上面
如果把这个注解添加类上面,这个类里面所有的方法都添加事务
如果把这个注解添加方法上面,为这个方法添加事务
5.声明式事务管理参数配置
5.1 propagation:事务传播行为
当一个事务方法被另外一个事务方法调用时候,这个事务方法如何进行
事务的传播行为可以由传播属性指定。Spring 定义了 7 种类传播行为。
5.2 ioslation:事务隔离级别
事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题
有三个读问题:脏读、不可重复读、虚(幻)读
脏读:一个未提交事务读取到另一个未提交事务的数据
不可重复读:一个未提交事务读取到另一提交事务修改数据
脏读:一个未提交事务读取到另一个未提交事务的数据
通过设置事务隔离级别,解决读问题
5.3 其他参数
timeout:超时时间
事务需要在一定时间内进行提交,如果不提交进行回滚
默认值是-1,设置时间以秒单位进行计算
readOnly:是否只读
读:查询操作,写:添加修改删除操作
readOnly 默认值 false,表示可以查询,可以添加修改删除操作
设置 readOnly 值是 true,设置成 true 之后,只能查询
rollbackFor:回滚
设置查询哪些异常进行事务回滚
noRollbackFor:不回滚
设置出现哪些异常不进行事务回滚
6.XML 声明式事务管理
在 spring 配置文件中进行配置
第一步 配置事务管理器
第二步 配置通知
第三步 配置切入点和切面
7.完全注解方式
创建配置类,使用配置类替代 xml 配置文件
版权声明: 本文为 InfoQ 作者【浅辄】的原创文章。
原文链接:【http://xie.infoq.cn/article/afbc6bec73edeebf761412103】。文章转载请联系作者。
评论