1、Spring事务管理

spring事务管理

什么是事务?

事务是数据库中执行操作的最小单元,不可再分,要么全部执行成功,要么全部执行失败。

事务的特性

1、原子性:事务是最小的,不可再分。
2、一致性:要么成功,要么失败。
3、隔离性:相互隔离,彼此互不影响。
4、持久性:提交的事务保持不变。

局部事务

单个资源,比如单个服务器或数据库。并且事务由底层资源管理。

全局事务(也称分布式事务)

多个资源,比如多个服务器和数据库。并且spring中事务由单独、专门的事务管理器进行管理。

spring声明式管理

使用时只需要声明@Transatinal注解即可。spring声明式管理采用了动态代理机制(动态代理机制分为:JDK和CGLIB)。
底层原理(应用了AOP思想)

在这里插入图片描述

spring声明式事务使用
在spring环境中:
	1、在配置类上方使用EnableTransactionManagement注解。
	2、@transactional注解可以添加在业务类、接口(spring5.0版本以上)、方法上。

在这里插入图片描述

事务的传播方式

传播级别:required和required new。
required:若没有事务,则开启新事务;若有事务,则继续使用当前的事务。
required new:若没有事务,则开启新事务;若有事务,则停止原来的事务,开启新的事务。

注意:事务传播的前提是,调用其他类的方法,传播级别才能生效;若在同一个类中调用不同的方法,则只能共用同一个事务。

在这里插入图片描述

事务回滚

默认情况下,业务方法抛出运行时异常,事务回滚可以自定义回滚条件,出现什么异常回滚,出现什么异常不回滚。
@Transactional(rollbackFor=xxxException.class,norollbackFor=xxx.Exception.class)

注意:若在测试方法/测试类中使用@transactional,则事务会执行测试方法,但执行完后事务会回滚,不会提交。

事务的隔离级别

属性:isolation
属性值:
   1、读未提交:read uncommitted。事务可以读取到其他事务未提交/未回滚之前的数据。
   2、读已提交:read committed
   3、可重复读:repeatable read
   4、可串行化:serializable
mysql的隔离级别是:可重复读(不产生幻读,因为通过已经通过其他方式得到解决)。
oracle、sql server的隔离级别是:读已提交。

读未提交

在这里插入图片描述

读已提交

在这里插入图片描述在这里插入图片描述

可重复读

在这里插入图片描述

在这里插入图片描述

可串行化

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值