代码之家  ›  专栏  ›  技术社区  ›  lisak

Spring-在声明性事务管理中如何在回滚期间收集信息

  •  2
  • lisak  · 技术社区  · 14 年前

    有人能告诉我在@transactional methods中捕获SQL和其他异常是否安全,是否建议这样做?当使用编程事务管理时,我可以简单地捕获异常并做我想做的任何事情,但是我不知道是否通过捕获这些异常来破坏事务AOP系统,否则这些异常会触发回滚…如果我这样做,说明性的方式。

    我假设有代理,它们在AOP通知中为@transactional方法创建一个具有单独连接的逻辑事务。他们需要捕获“我想要捕获”的异常并回滚事务。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Sean Patrick Floyd    14 年前

    只能使用此代码以编程方式将事务标记为回滚

    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    

    Rolling back a declarative transaction Spring Reference .

    但不建议这样做,因为您将代码与Spring框架紧密耦合。


    也许,如果您在多个地方这样做,您应该引入一个助手方法,比如 TransactionUtils.rollbackCurrentTransaction() . 这样,如果您决定改变您的事务性方法(或者上帝禁止,离开Spring),您只需要改变一个方法。

        2
  •  0
  •   matt b    14 年前

    您所描述的实际上是Spring如何知道是否启动事务回滚。如果您接受了异常,那么Spring就永远没有机会知道它应该回滚事务。