Spring中基于AOP的事务管理,学习或者温习一下

169 篇文章 0 订阅
142 篇文章 0 订阅

Spring中基于AOP的事务管理

1.在项目启动类上添加@EnableTransactionManagement注解,(新版本springboot不用添加)

2.在合适的类上或者方法上添加@Transactional注解

@Transcationl

当在一个业务的方法中设置一个异常时,虽然抛出了异常,但是数据还是变化了!!

Spring中基于AOP的事务管理,学习或者温习一下

当状态从0禁止变为1(启用)时我在上面设置了抛出一个异常

Spring中基于AOP的事务管理,学习或者温习一下

刷新页面后,发现数据已经发生了变化!!

Spring中基于AOP的事务管理,学习或者温习一下

当我在用户业务层添加 @Transactionl后

Spring中基于AOP的事务管理,学习或者温习一下

数据发生了回滚,禁止并没有变成启动!说明transcationl生效了

Spring中基于AOP的事务管理,学习或者温习一下

readyOnly

readyOnly只读:指定事务是否是只读事务

Spring中基于AOP的事务管理,学习或者温习一下

当在用户的业务层上注解@Transactional(readOnly = true)

如果再对用户进行增删改等操作时,就会报错

Spring中基于AOP的事务管理,学习或者温习一下

当readOnly只读默认是false,在进行查询的时候使用true可以增加效率,但是对于增删改等要使用true

image.png

rollbackFor

rollbackFor:在出现指定异常时回滚(默认RuntimeException,Error都会滚)

Spring中基于AOP的事务管理,学习或者温习一下

在改变状态的业务方法上添加rollbackFor属性,值为自定义异常;

Spring中基于AOP的事务管理,学习或者温习一下

在valid==1时,抛出此异常;检测数据是否回滚

Spring中基于AOP的事务管理,学习或者温习一下

可以看到抛出异常,并且禁用状态并没有改变,数据回滚了

noRollbackFor

noRollbackFor:出现指定异常,不发生回滚

把之前的rollbackFor改为noRollbackFor

Spring中基于AOP的事务管理,学习或者温习一下

改变状态,改变之前是禁用

Spring中基于AOP的事务管理,学习或者温习一下

抛出异常后刷新页面,状态已经变成启用了。说明虽然使用@Transactional注解,抛出了异常,但是数据并没有回滚

Spring中基于AOP的事务管理,学习或者温习一下

timeout

超出设定时间业务没有完成就回滚

isolation 事务隔离级别

如果多个事务并行执行,就会出现脏读、幻读、重复读等现象,如果不希望出现这种现象,就可以设置此属性,一般设置值为 : Isolation.READ_COMMITTED

propagation 事务的传播特性

**不同业务对象(service)**中事务方法之间相互调用时,业务的传播方式。
    默认是:Propagation.REQUIRES_NEW  。指多个事务之间是同一个事务对象,其中一个事务回滚,之前的事务都会回滚
    如果想让其中一个事务回滚时,其他事务不回滚;就使用   Propagation.REQUIRES_NEW
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值