spring声明式事务(五)

事务传播行为详解:PROPAGATION_NEVER和PROPAGATION_NESTED
本文深入探讨了PROPAGATION_NEVER和PROPAGATION_NESTED两种事务传播行为,解释了它们在不同场景下的工作原理,包括非事务执行、嵌套事务执行以及如何在DataSourceTransactionManager中正确配置PROPAGATION_NESTED以支持嵌套事务。


l PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常 单独调用 methodB ,则非事务的执行。 调用 methodA 则会抛出异常

l PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中 . 如果没有活动事务 , 则按 TransactionDefinition.PROPAGATION_REQUIRED 属性执行 这是一个嵌套事务 , 使用 JDBC 3.0 驱动时 , 仅仅支持 DataSourceTransactionManager 作为事务管理器。需要 JDBC 驱动的 java.sql.Savepoint 类。有一些 JTA 的事务管理器实现可能也提供了同样的功能。 使用 PROPAGATION_NESTED ,还需要把 PlatformTransactionManager 的 nestedTransactionAllowed 属性设为 true; 而 nestedTransactionAllowed 属性值默认为 false; 如果单独调用 methodB 方法,则按 REQUIRED 属性执行。 如果调用 methodA 方法,相当于下面的效果 当 methodB 方法调用之前,调用 setSavepoint 方法,保存当前的状态到 savepoint 。如果 methodB 方法调用失败,则恢复到之前保存的状态。但是需要注意的是,这时的事务并没有进行提交,如果后续的代码 (doSomeThingB() 方法 ) 调用失败,则回滚包括 methodB 方法的所有操作。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值