nevernam
2012-06-18 12:26
浏览 851
已采纳

spring 事务管理 手动回滚策略

如果我不用spring的事务代理机制,直接在service代码中进行事务的提交或者回滚处理,那么一般是这样的处理逻辑-->主要有2点:

1:事务流程中,某一节点的数据(正常返回)遇到某值时,进行回滚,执行结果中说明情况.
2:事务流程中,try catch 所有的代码-->保证遇到运行时异常,或者error的时候,进行回滚

现在要用spring的事务管理了,导致在处理提到的第一个情况的时候有个问题,不知道如何解决

就是spring所管理到的业务代码方法,必须要抛出指定异常,才可以回滚

那么,如果我在1中的那种情况,如何保证让service方法,既有返回值,又能回滚呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • oyj7454103 2012-06-18 13:52
    已采纳

    [quote]就是spring所管理到的业务代码方法,必须要抛出指定异常,才可以回滚

    那么,如果我在1中的那种情况,如何保证让service方法,既有返回值,又能回滚呢? [/quote]

    可以自定义一个业务 异常,这个异常里面可以带 错误代码,即返回值,然后定义这个异常也需要回滚就好了!你在 action层面可以捕获到异常,并且处理

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dashabenmao 2012-06-18 14:59

    做个判断。if(返回值){
    new Exception();
    }

    评论
    解决 无用
    打赏 举报
  • 鄂州蚊子 2012-06-18 16:06

    顶7454103 附加说明一下:
    如果存在这种需求,其本身就是隐含的业务,除了使用7454103 所说的,还有就是分拆成几个对应的子功能。

    评论
    解决 无用
    打赏 举报
  • chenyangoutlook 2012-06-19 06:47

    可以扩展TranscationStatus,自定义异常,捕获来自于自定义的status,进行undo

    评论
    解决 无用
    打赏 举报
  • ll89308839 2012-06-21 10:42

    try{....
    throw new Exeception();
    }catch(Exeception e){
    throw e;
    }finally{
    return ;
    }

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题