2

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

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

4

2 回答 2

1

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

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

请参阅Spring Reference中的回滚声明性事务

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


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

于 2010-09-27T13:28:11.380 回答
0

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

于 2010-09-26T21:16:13.623 回答