Spring transaction事务 roll back各种回滚
来源:互联网 发布:常见的网络促销方式 编辑:程序博客网 时间:2024/06/03 18:47
Spring 事务注解的参数
属性名
类型
说明
isolation
枚举org.springframework.transaction.annotation.Isolation的值
事务隔离级别
noRollbackFor
Class<? extends Throwable>[]
一组异常类,遇到时不回滚。默认为{}
noRollbackForClassName
Stirng[]
一组异常类名,遇到时不回滚,默认为{}
propagation
枚举org.springframework.transaction.annotation.Propagation的值
事务传播行为
readOnly
boolean
事务读写性
rollbackFor
Class<? extends Throwable>[]
一组异常类,遇到时回滚
rollbackForClassName
Stirng[]
一组异常类名,遇到时回滚
timeout
int
超时时间,以秒为单位
value
String
可选的限定描述符,指定使用的事务管理器
在实际开发中有时事务会回滚有时不会回滚,具体是因为抛出的异常不同而造成的。
1、@Transactional 不指定任何回滚异常
当声明事务时,不指定任何回滚异常时,默认的是针对unchecked
checked异常,即Exception可try{}捕获的不会回滚。
spring的事务管理理解为:开发者自己捕获住了,意识到了风险,就无需在进行回滚。没有捕获的是开发者意识不到的风险问题,那么就需要spring的事务来进行回滚操作。
2、如果想对所有异常进行回滚的话需要制定
@Transactional(rollbackFor = Exception.class)
这样的话会对所有的异常进行回滚。
3、如果在代码中try{}catch住并且没有抛出来的话始终不会回滚。
eg:
测试1:public SMSTiming createSMSTiming(SMSTiming smsTiming){ SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); int i = 4/0; //人为产生异常(实际这里抛出了ArithmeticException运行异常) return s; }测试1结果:会事务回滚----数据库中未插入新数据。 测试2: public SMSTiming createSMSTiming(SMSTiming smsTiming) throws Exception{//受检异常(非运行异常)必须抛出 SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); try{ int i = 4/0; //人为产生异常 }catch(Exception e){ thrownew Exception ("");//抛出Exception异常 } return s; }测试2结果:不会事务回滚----数据库中插入新数据。 测试3: public SMSTiming createSMSTiming(SMSTiming smsTiming) throws RuntimeException{//运行异常(非受检异常)可以不抛出 SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); try{ int i = 4/0; //人为产生异常 }catch(Exception e){ thrownewRuntimeException("");//抛出RuntimeException异常 } return s; }测试3结果:会事务回滚----数据库中未插入新数据 测试4: public SMSTiming createSMSTiming(SMSTiming smsTiming) throws TestException{//受检异常(非运行异常)必须抛出 SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); try{ int i = 4/0; //人为产生异常 }catch(Exception e){ thrownewTestException("");//抛出TestException异常 } return s; }测试4结果:会事务回滚----数据库中未插入新数据。 测试5: public SMSTiming createSMSTiming(SMSTiming smsTiming) throws MyTestException{//受检异常(非运行异常)必须抛出 SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); try{ int i = 4/0; //人为产生异常 }catch(Exception e){ thrownewMyTestException("");//抛出MyTestException异常 } return s; } 测试5结果:不会事务回滚----数据库中插入新数据。 测试6: public SMSTiming createSMSTiming(SMSTiming smsTiming) throws MyTestException{//受检异常(非运行异常)必须抛出 (注意:此时spring指定配置此异常回滚) SMSTiming s= this.getSmsTimingDAO().createSMSTiming(smsTiming); try{ int i = 4/0; //人为产生异常 }catch(Exception e){ thrownewMyTestException("");//抛出MyTestException异常 } return s; } 测试6结果:会事务回滚----数据库中未插入新数据。Spring框架的事务基础架构代码将默认地 只 在抛出运行时和unchecked exceptions时才标识事务回滚。 也就是说,当抛出一个RuntimeException 或其子类例的实例时。(Errors 也一样 - 默认地 - 标识事务回滚。)从事务方法中抛出的Checked exceptions将 不 被标识进行事务回滚
- Spring transaction事务 roll back各种回滚
- Spring transaction事务 roll back各种回滚
- Spring transaction事务 roll back各种回滚
- Spring transaction事务的roll back回滚机制
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚: rollback-for
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚
- Spring transaction事务之roll back回滚: rollback-for
- Spring transaction事务之roll back回滚: rollback-for
- Spring transaction事务之roll back回滚: rollback-for
- Spring transaction事宜 roll back各种回滚
- Java并行程序基础
- 《Spring Web Flow 实践》
- 发送有序和无序广播
- C注释转换为C++注释
- 网关
- Spring transaction事务 roll back各种回滚
- QT笔记
- 项目review--2017.05.27
- 约瑟夫环问题(一)(难度:1颗星)
- jquery生成二维码
- Java MD5加密工具类
- 5-3 模拟EXCEL排序 (25分)
- 外观模式
- html标签