spring boot 事物回滚-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 553808
  • 博文数量: 298
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3077
  • 用 户 组: 普通用户
  • 注册时间: 2019-06-17 10:57
文章分类

(298)

  • (298)
文章存档

(96)

(201)

(1)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: java

2021-07-03 14:47:07

springboot中事务的使用:

1、启动类加上@enabletransactionmanagement注解,开启事务支持(其实默认是开启的)。

2、在使用事务的public(只有public支持事务)方法(或者类-相当于该类的所有public方法都使用)加上@transactional注解。

在实际使用中一般是在service中使用@transactional,那么对于controller->service流程中:

如果controller未开启事务,service中开始了事务,service成功执行,controller在之后的运行中出现异常(错误),不会自动回滚。

也就是说,只有在开启事务的方法中出现异常(默认只有非检测性异常才生效-runtimeexception )(错误-error)才会自动回滚。

 如果想要对抛出的任何异常都进行自动回滚(而不是只针对runtimeexception),只需要在使用@transactional(rollbackfor = exception.class)即可。

开启事务的方法中事务回滚的情况:

①未发现的异常,程序运行过程中自动抛出runtimeexception或者其子类,程序终止,自动回滚。

②使用transactionaspectsupport.currenttransactionstatus().setrollbackonly();进行手动回滚。

③注意:如果在try-catch语句中对可能出现的异常(runtimeexception)进行了处理,没有再手动throw异常,spring认为该方法成功执行,不会进行回滚,此时需要调用②中方法进行手动回滚 (java 框架项目案例 fhadmin.cn)

另外,如果try-catch语句在finally中进行了return操作,那么catch中手动抛出的异常也会被覆盖,同样不会自动回滚。

点击(此处)折叠或打开

  1. //不会自动回滚
  2. try{
  3.     throw new runtimeexception();
  4. }catch(runtimeexception e){
  5.     e.printstacktrace();
  6. }finally{
  7. }
  8. //会自动回滚
  9. try{
  10.     throw new runtimeexception();
  11. }catch(runtimeexception e){
  12.     e.printstacktrace();
  13.     throw new runtimeexception();
  14. }finally{
  15. }
阅读(7176) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图