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

时间:2010-09-26 19:24:34

标签: java spring transactions spring-aop

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用此代码

以编程方式将事务标记为仅回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

请参阅Rolling back a declarative transaction中的Spring Reference

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


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

答案 1 :(得分:0)

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