`

try catch异常抛出与spring事务回滚策略相关

阅读更多

将异常捕获,并且在catch块中不对事务做显式提交(或其他应该做的操作如关闭资源等)=生吞掉异常;

spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtime异常).
如果抛出runtime exception 并在你的业务方法中没有catch到的话,事务会回滚。
一般不需要在业务方法中catch异常,如果非要catch,在做完你想做的工作后(比如关闭文件等)一定要抛出runtime exception,否则spring会将你的操作commit,这样就会产生脏数据.所以你的catch代码是画蛇添足。

 

由此可以推知,在spring中如果某个业务方法被一个

     try {   

            //bisiness logic code   

          } catch(Exception e) {   

             //handle the exception   

 

整个包裹起来,则这个业务方法也就等于脱离了spring事务的管理,因为没有任何异常会从业务方法中抛出!全被捕获并吞掉,导致spring异常抛出触发事务回滚策略失效。


不过,如果在catch代码块中采用页面硬编码的方式使用spring api对事务做显式的回滚,这样写也未尝不可。 

分享到:
评论
2 楼 a_bin 2013-04-24  
jay61439476 写道
"采用页面硬编码的方式使用spring api对事务做显式的回滚"请假下如何写…………
我现在是在service层出现异常需要回滚,但是有一个值必须返回给service的调用者,不知道该如何及回滚,又可以正常返回值

通过抛异常方式就可以了,
在service的里try-catch,在catch中throw new runingtimeexception(“值”),把值抛出去,
service的调用者那边,catch这个异常,就可以拿到值了
1 楼 jay61439476 2013-04-13  
"采用页面硬编码的方式使用spring api对事务做显式的回滚"请假下如何写…………
我现在是在service层出现异常需要回滚,但是有一个值必须返回给service的调用者,不知道该如何及回滚,又可以正常返回值

相关推荐

    使用Spring AOP对异常进行统一处理

    我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: ...5.接口抛出异常,破坏封装,打破了接口与实现之间的清晰界限。 6.异常处理代码散落在,修改起来时非常麻烦。无法对某些异常进行统一处理和修改。

    java全局异常统一处理

    在Java中,全局异常统一处理是一种常见的错误处理模式,它允许在一个单独的地方集中处理应用程序中抛出的所有异常。这种处理方式有助于简化代码,提高代码的可读性和可维护性。 要实现全局异常统一处理,Java提供了...

    Spring AOP @Aspect 基本用法

    1、@Aspect放在类头上,把...3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 3.5、@Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。

    eclipse安卓开发必备工具

    } } } 也是如我所想 抛出java.lang.IllegalAccessException异常,当时就怀疑Spring框架是否使用反射的一些特性,后来查了相关文档才知 道原因何在: 实际上java在反射创建一个类的实例时,默认会检测是否符合相关...

    java面试题

    在try块中可以抛出异常吗? 41 61. MVC的各个部分都有那些技术来实现?如何实现? 42 62. java中实现多态的机制是什么? 42 63. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机...

    javaSE代码实例

    11.3.4 方法重写对抛出异常声明的约束 210 11.4 定义自己的异常 212 11.4.1 创建自己的异常类 212 11.4.2 使用自定义的异常类 213 11.4.3 显性再抛出作用的体现 215 11.5 异常的匹配 217 11.5.1 同时...

    java基础题 很全面

    在try块中可以抛出异常吗? 13 53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? ...

    最新Java面试宝典pdf版

    在try块中可以抛出异常吗? 29 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在...

    Java面试宝典2010版

    在try块中可以抛出异常吗? 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 47、sleep() 和 wait() 有什么区别? 48、同步和异步有何异同,在什么情况...

    Java面试笔试资料大全

    在try块中可以抛出异常吗? 29 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在...

    Java面试宝典-经典

    在try块中可以抛出异常吗? 29 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在...

    JAVA面试宝典2010

    在try块中可以抛出异常吗? 29 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在...

    java面试题大全(2012版)

    在try块中可以抛出异常吗? 29 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在...

    Java面试宝典2012版

    在try块中可以抛出异常吗? 29 二. Jav线程部分 7 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、...

    java面试宝典2012

    在try块中可以抛出异常吗? 32 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 32 47、sleep() 和 wait() 有什么区别? 33 48、同步和异步有何异同,在...

    Java面试宝典2012新版

    在try块中可以抛出异常吗? 29 二. Jav线程部分 7 46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和...

    整理后java开发全套达内学习笔记(含练习)

    throw (关键字) throws (关键字) [θrәu] 抛出(异常) transient (关键字) 瞬变;临时的['trænziәnt]'(可序列化) valid 正确的,有效的 ['vælid] variable n.变量 a.可变的['vєәriәbl] volatile (关键字) 不...

Global site tag (gtag.js) - Google Analytics