@Transactional 仅针对少数例外传播事务
Posted
技术标签:
【中文标题】@Transactional 仅针对少数例外传播事务【英文标题】:@Transactional propogate transactions only for a few exceptions 【发布时间】:2013-09-12 02:27:04 【问题描述】:我正在尝试使所有未经检查的异常的事务失败,但特定的未经检查的异常除外(在我的情况下 - DuplicateKeyException)。如何使用 Spring 框架的 @Transactional 注释实现这种定制?
谢谢!
【问题讨论】:
那么当 DuplicateKeyException 发生时,您期望会发生什么?您对交易“未失败”的定义是什么? 我捕获了 DuplicateKeyException 异常并继续交易。如果设置 @Transactional(propogation=Propogation.NEVER) 一切都按我的预期进行,否则它会给我以下错误消息:org.springframework.jdbc.core.StatementCreatorUtils - JDBC 3.0 getParameterType call not supported org.postgresql.util.PSQLException: ERROR : 当前事务被中止,命令被忽略直到事务块结束 【参考方案1】:试试noRollbackFor 选项
@Transactional(noRollbackFor=DuplicateKeyException.class)
【讨论】:
我试过这个,但它给出了同样的错误。问题似乎是事务失败,这告诉事务管理器应该对失败的事务执行什么回滚操作【参考方案2】:这样做:
public void driverMethod()
try
BeforeException()
catch(DuplicateKeyException e)
AfterException()
@Transactional(propagation = Propagation.REQUIRES_NEW)
private BeforeException()
@Transactional(propagation = Propagation.REQUIRES_NEW)
private AfterException()
【讨论】:
以上是关于@Transactional 仅针对少数例外传播事务的主要内容,如果未能解决你的问题,请参考以下文章