springboot使用@Transaction注解未生效

本文探讨了在SpringBoot项目中遇到@Transaction注解未生效的问题,包括需要在启动类启用@EnableTransactionManagement,数据库引擎需支持事务,@Transaction注解需应用在public方法上,以及指定回滚异常类型。特别指出,直接在类内部调用有事务的方法会导致事务失效,并提供了两种解决方案:暴露代理类或调整方法到不同类中。
摘要由CSDN通过智能技术生成

写在前面:

目前开发使用的是springboot,然后对一些表操作会有要添加事务的操作。
springboot项目中的Application启动类中添加@EnableTransactionManagement注解开启事务。

接下来在需要添加事务的方法上添加@Transaction注解开启事务。@Transaction注解生效有几个需要注意的地方:

1.spring事务的支持是对数据库事务的支持。所以想要使用spring开启事务,首先数据库的引擎必须是支持事务的。

2.@Transaction需要加载public类型的方法上。其他类型的方法不报错,但是事务也不会生效。

3.@Transaction最好制定回滚的错误类型。roll back for = "具体的错误类型"。

因为spring事务管理默认是只会处理unchecked的异常:也就是runtime异常及其子类和错误(error)

checked异常包括Exception下除了runtimeException以外的异常。spring默认不会处理这些异常。所以需要我们在使用的时候在

@Transaction(rollbackFor = Exception.class)来指定回滚的异常。同样,也可以指定某个异常不回滚。可以使用norollbackFor = 具体的异常。
4.因为spring是通过代理对象来回滚事务的。所以,如果在一个为开启事务的方法中,直接调用本类中其他有事务的方法时,事务会失效。例如:
     


                
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值