Spring在异常发生时默认的回滚策略测试
来源:互联网 发布:淘宝的欧莱雅是真的吗 编辑:程序博客网 时间:2024/06/14 07:00
项目中为了方便,就直接使用了@Transactional注解,并且没有添加属性。工作中发现有的时候事务会回滚,有的不会,查了下,说Spring只会在RuntimeException发生时才会回滚,如果发生可检查的Exception就不回滚。我当时的疑惑是:
1. 如果代码里发生了Exception,但是被我抓住后,又抛出RuntimeException,事务还会回滚吗?
2. 我的情况是无论事务是否成功,都需要更新某个表关于这个事务成功与否的状态,我是放在finally块里面执行,它也会被一道回滚吗?
开始我的测试,首先是抓住异常并抛出Exception,代码如下:
@Transactionalpublic int saveData() throws Exception{int i = 2; try {jdbc.execute("insert into DEATH (PERSON_ID, DEATH_DATE, DEATH_TYPE_CONCEPT_ID) values (2, TO_DATE(SYSDATE),2)");jdbc.execute("insert into DEATH (PERSON_ID, DEATH_TYPE_CONCEPT_ID) values (1,1)");i = 3;} catch (DataAccessException e) {throw new Exception("err----------", e);} finally {jdbc.execute("insert into DEATH (PERSON_ID, DEATH_DATE, DEATH_TYPE_CONCEPT_ID) values (3, TO_DATE(SYSDATE),3)");}return i;}
执行后的结果如下图,发现事物没有回滚:
修改代码,抛出RuntimeException,代码如下:
@Transactionalpublic int saveData() throws Exception{int i = 2; try {jdbc.execute("insert into DEATH (PERSON_ID, DEATH_DATE, DEATH_TYPE_CONCEPT_ID) values (2, TO_DATE(SYSDATE),2)");jdbc.execute("insert into DEATH (PERSON_ID, DEATH_TYPE_CONCEPT_ID) values (1,1)");i = 3;} catch (DataAccessException e) {throw new RuntimeException("err----------", e);} finally {jdbc.execute("insert into DEATH (PERSON_ID, DEATH_DATE, DEATH_TYPE_CONCEPT_ID) values (3, TO_DATE(SYSDATE),3)");}return i;}
执行结果如下图,事务回滚了,并且finally块里的操作也被回滚:
0 0
- Spring在异常发生时默认的回滚策略测试
- 异常捕获不抛出,Spring事务无法回滚 (默认spring只在发生未被捕获的runtimeexcetpion时才回滚。)
- Spring中发生异常的事务回滚问题
- spring默认的事物回滚机制,当发生runtimeexception是不会回滚的
- Spring的AOP事务管理默认针对unchecked异常回滚
- Spring管理事务默认回滚的异常是什么?
- Spring管理事务默认回滚的异常是什么?
- Spring管理事务默认回滚的异常是什么?
- spring事务默认运行时异常回滚,RuntimeException
- spring事务管理默认回滚异常
- spring异常抛出触发事务回滚策略导读
- spring异常抛出触发事务回滚策略导读
- Spring异常抛出触发事务回滚策略
- Spring事务回滚策略
- spring frame 事务回滚的测试
- 关于spring在service层catch异常而出现无法回滚的问题的解决
- Spring事务异常回滚
- spring事物异常回滚
- codeforces732D Exams(贪心+二分)
- 百睿联嵌入式硬件记录
- Android检测手机锁屏以及保持屏幕常亮
- 同步与锁
- Win10 Gitblit使用笔记
- Spring在异常发生时默认的回滚策略测试
- CentOS 6.5 更新yum源
- 11月10日——离noip还有9天【你的名字……】与[一个神奇的函数]
- eval()报错 Chorme :Uncaught SyntaxError: Unexpected token{ 火狐:SyntaxError: missing ] after element lis
- HiLog---unity中在手机屏幕打印日志,写入日志到本地文件
- 函数
- 近期感悟
- android studio 编译时lint错误及解决方法
- 由浅到深理解ROS(5)- 启动文件