spring异常抛出触发事务回滚策略导读

特别注意:即使是在spring默认的异常触发事务回滚策略(unchecked exception)下, 如果使用try-catch捕获抛出的unchecked异常后没有在catch块中采用页面硬编码的方式使用spring api对事务做显式的回滚,则事务不会回滚。

 

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


一般不需要在业务方法中catch异常,如果非要catch,在做完你想做的工作后(比如关闭文件等)一定要抛出runtime exception,否则spring会将你的操作commit,这样就会产生脏数据.所以你的catch代码是画蛇添足。
  
由此可以推知,在spring中如果某个业务方法被一个
      try {   
             //bisiness logic code    
          } catch(Exception e) {    
             //handle the exception    
         }
 
整个包裹起来,则这个业务方法也就等于脱离了spring事务的管理,因为没有任何异常会从业务方法中抛出!全被捕获并吞掉,导致spring异常抛出触发事务回滚策略失效。 


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

你可能感兴趣的:(SPRING相关,数据库相关)