请任何人告诉我,在@Transactional方法中捕获SQL和其他异常是安全的还是推荐的?当使用编程式事务管理时,我可以简单地捕获异常并做任何我想做的事情,但我不知道是否通过捕获这些否则会触发回滚的异常来破坏事务性AOP系统……如果我以声明的方式来做。
我假设有一些代理,它们为AOP建议中的@ transaction方法创建了一个具有独立连接的逻辑事务。并且他们需要捕获“我想捕获”的异常,并回滚事务。
发布于 2010-09-27 21:28:11
可以使用以下代码以编程方式将事务标记为仅回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();请参见Spring Reference中的Rolling back a declarative transaction。
但不推荐这样做,因为您将代码与spring框架紧密耦合在一起。
也许,如果你在多个地方这样做,你应该引入一个帮助器方法,比如TransactionUtils.rollbackCurrentTransaction()。这样,如果你决定改变你的事务性方法(或者天不允许,远离spring),你只需要改变一种方法。
发布于 2010-09-27 05:16:14
您所描述的实际上是Spring如何知道是否启动事务回滚。如果你接受了异常,那么Spring永远没有机会知道它应该回滚事务。
https://stackoverflow.com/questions/3799421
复制相似问题