spring事务的处理

在做项目的时候第一次用到spring事务,由于对spring事务的传播方式的不理解,遇到了很多问题,总结一下。(以下都是以注入的方式)

1、在service组件中,如果一个非事务的方法调用该组件中声明了事务的方法,则全都按照无事务执行。

2、在service组件中,如果一个非事务的方法调用另外一个service中的声明了事务的方法,并且该service是通过注入的方式调用,则该声明了事务的方法仍然按照有事务进行。

3、在service组件中,如果一个声明了事务的方法service1.a() ,调用另一个service中的声明了事务的方法 service2.b(),根据传播方式的不同,有以下几种情况。

1、如果两个方法声明的事务都是默认事务,即REQUIRED.

这样的情况下,b方法的事务加入到a方法的事务中,a,b方法中无论谁抛异常,两个都一起回滚。即使a方法把异常try catch掉,并且在catch中调用b方法,当a方法抛异常的时候,b方法也照样回滚,并且会报Transaction rolled back because it has been marked as rollback only 异常。例如
try {
//报异常的代码
} catch (Exception e) {
service2.b()
}
2、如果a方法声明的事务为默认,b的事务为
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值