【问题标题】:Spring - how to gather informations during rollbacks in declarative transaction managementSpring - 如何在声明式事务管理中的回滚期间收集信息
【发布时间】:2011-04-17 11:57:35
【问题描述】:

谁能告诉我在@Transactional 方法中捕获SQL 和其他异常是否安全并被推荐?当使用程序化事务管理时,我可以简单地捕获异常并做任何我想做的事情,但我不知道我是否不会通过捕获这些异常来破坏事务性 AOP 系统,否则这些异常会触发回滚......如果我以声明的方式进行。

我想有代理可以为 AOP 建议中的 @Transactional 方法创建一个具有单独连接的逻辑事务。并且他们需要捕获“我想捕获”的异常并将事务回滚。

【问题讨论】:

    标签: java spring transactions spring-aop


    【解决方案1】:

    您描述的确实是Spring如何知道是否启动事务回滚。如果你吞下了异常,那么 Spring 永远不会知道它应该回滚事务。

    【讨论】:

      【解决方案2】:

      您可以使用此代码以编程方式将事务标记为仅回滚

      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
      

      Spring Reference 中查看Rolling back a declarative transaction

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


      也许,如果你在不止一个地方这样做,你应该引入一个帮助方法,比如TransactionUtils.rollbackCurrentTransaction()。这样,如果你决定改变你的事务方法(或者上帝禁止,远离 spring),你只需要改变一种方法。

      【讨论】:

      • 我的意思是,当事务回滚时我需要做一些事情......就像我可以捕捉到异常一样,例如我可以记录发生的事情或对 bean 做一些事情正在被持久化等等。
      • 那么这需要在事务通知中的 AOP 通知。阅读 Spring AOP 参考 (static.springsource.org/spring/docs/3.0.x/…) 获取信息。
      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2011-10-18
      • 2013-02-19
      • 2015-03-12
      相关资源
      最近更新 更多