Spring事务超时、回滚的相关说明
2024-10-15 08:38:00
事务超时:
@Transactional(timeout = 60)
如果用这个注解描述一个方法的话,线程已经跑到方法里面,如果已经过去60秒了还没跑完这个方法并且线程在这个方法中的后面还有涉及到对数据库的增删改查操作时会报事务超时错误(会回滚)。
如果已经过去60秒了还没跑完但是后面已经没有涉及到对数据库的增删改查操作,那么这时不会报事务超时错误(不会回滚)。
答案是 RuntimeException或者Error。
注意:如果事务在try{}catch(Exception e){e.printStackTrace();}中跑,并且catch中只是打印e的话,那么事务不会rollback。因为异常被catch掉了,框架不知道发生了异常。
如果想要rollback,可以加上rollbackFor=Exception.class,然后:
①在方法上添加 throws Exception,将方法中出现的异常抛出给spring事务,
②去掉方法体中的try catch
③catch (Exception e) { throw e;}继续向上抛,目的是让spring事务捕获这个异常。
rollbackFor=Exception.class,catch(){
throw new RunTimeException();
}
如果不加rollbackFor=Exception.class,抛出new Exception() 是不会回滚的。Spring源码如下:
public boolean rollbackOn(Throwable ex) {
public boolean rollbackOn(Throwable ex) {
return (ex instanceof RuntimeException || ex instanceof Error);
}
如果是RuntimeException或Error的话,就返回True,表示要回滚,否则返回False,表示不回滚。
只有spring事务捕获到Exception异常后,@Transactional(rollbackFor=Exception.class),才会起到应有的作用;catch (Exception e) { e.printStackTrace(); }这句是捕获try中出现的Exception然后将异常信息打印出来,仅仅是打印出来,然后什么也没干。
只有spring事务捕获到Exception异常后,@Transactional(rollbackFor=Exception.class),才会起到应有的作用;catch (Exception e) { e.printStackTrace(); }这句是捕获try中出现的Exception然后将异常信息打印出来,仅仅是打印出来,然后什么也没干。
@Transactional(timeout =
60,rollbackFor=Exception.class)与rollbackFor=Exception.class的作用是1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
checked Unchecked exception是运行时错误。
60,rollbackFor=Exception.class)与rollbackFor=Exception.class的作用是1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
checked Unchecked exception是运行时错误。
最新文章
- easyUI-combobox 动态绑定数据源
- iOS 实现app文件共享
- (备忘)android模拟器摄像头模拟
- UWP开发-二维变换以及三维变换
- SQL行转列
- wordpress中文标签无法访问的解决方法
- Qt版helloworld
- POJ3436 ACM Computer Factory(最大流)
- SQL Server本地连接不上
- 变位词(0029)-swustoj
- .NET之IOC控制反转运用
- 记一次简单的sql注入
- MSMQ 队列消息和死信队列
- 电商项目-商品表(spu)、规格表(sku)设计
- 往github上传代码忽略node_modules文件夹
- SQL Server中比较末尾带有空格的字符串遇到的坑 (转载)
- retrofit 基础使用
- 【前端基础系列】理解GET与POST请求区别
- Maven使用deploy上传jar包到远程库
- HDU 1848 Fibonacci again and again【博弈SG】
热门文章
- 关于使用QTcpSocket的一些总结
- Java中static、final、static final的区别(转)+transient
- 关于Unity中表面着色器的使用
- SAP Process Integration - High Level ERP/Integration Process --- Cargill Process Concept Design
- C#.NET MVC 枚举转dictionary自动装载生成下拉框
- 每天一个linux命令:mv命令
- 由于PADT伪造攻击带来的大面积掉线原因分析
- 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向
- 安卓开发笔记——打造万能适配器(Adapter)
- eclipse中去掉validate的方法