Spring基础知识05

提示:这本文入门使用



前言


提示:以下是本篇文章正文内容,下面案例可供参考

Spring声明式事务(@Transactional)

事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行?
在事务嵌套的情况下,小事务统一由大事务来控制。

propagation = Propagation. REQUIRED
required:如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务。并在自己的事务内运行
required_new:当前的方法必须启动新事务,并在它自己的事务内运行.如果有事务正在运行,应该将它挂起
nested:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行.

总结:
1、事务传播级别是REQUIRED,icheckout()被调用时(假定被另一类中commit()调用),如果checkout()中的代码抛出异常,即便被捕获,commit()中的其他代码都会ro1l back
2、是REQUIRES_NEw,如果checkout()中的代码抛出异常,并且被捕获,commit()中的其他代码不会roll back;如果commit()中的其他代码抛出异常,而且没有捕获,不会导致checkout()回滚
3、是NESTED,如果checkout()中的代码抛出异常,并且被捕获,commit()中的其他代码不公ro11 back;如果commit()中的其他代码抛出异常,而且没有捕获,会导致checkout()回滚
PROPAGATION_REQUIRES_NEw 启动一‘个新的,不依赖于环境的“内部”事务.这个事务将被完全commited或ro11ed back 而不依赖于外部事务,它拥有自己的隔离范围,自己的锁,等等,当内部事务开始执行时,外部事务将被挂起,内务事务结束时,外部事务将继续执行.
另一方面,PROPAGATION_NESTED 开始一个“嵌套的”事务,它是已经存在事务的一个真正的子事务.嵌套事务开始执行时,它将取得一个 savepoint.如果这个嵌套事务失败,我们将回滚到此 savepoint.潜套事务是外部事务的一部分,只有外部事务结束后它才会被提交.
由此可见,PROPAGATION_REQUIRES_NEW和 PROPAGATION_NESTED 的最大区别在于,
PROPAGATION_REQUIRES_NEW完全是一个新的事务,而 PROPAGATION_NESTED则是外部事务的子事务,如果外部事务commit,嵌套事务也会被commit,这个规则同样适用于roll back.

事务的配置

依赖于aop,所以aop配置也必须得有。

< aop:config>
<aop:pointcut id=“txPointcut” expression=" execution(* com.mashibing.service..(…))
< !–事务建议–>
<aop:advisor advice-ref="" pointcut-ref=“txPointcut”</aop:advisor>
</ aop:config>
<tx:advice id=“myAdvice” transaction-manager=transactionManager>
< !—-配置事务的属性–>
< tx:attributes>
< !——配置在哪些方法上添加事斜-→>
< tx:method name=“addBook” propagation-"REQLUIRED"read-only=“true” isolation -“DEEALLT./>
<tx:method name=“updatePrice” propagation"REQUIRED”></tx:method>
</tx:attributes>
</tx:advice>
在这里插入图片描述
红色必背

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值