Grails中的HeuristicCompletionException可以简单地忽略吗?



在我的grails应用程序中,我经常得到org.springframework.transaction.HeuristicCompletionException:启发式完成:结果状态被回滚;嵌套异常是org.springframework.transaction.UnexpectedRollbackException:事务回滚,因为它已被标记为仅回滚.我不知何故发现,当任何类型的异常发生在由@Transactional注释的方法中并在具有自己@Transactional的方法中调用时,就会发生这种情况。我的问题是可以简单地捕获并忽略此异常吗?

我有一个解决方法,正如 Sudhir 在评论中建议的那样,我可以在其中一个方法中复制启发式完成问题,并发现为了不回滚服务的现有事务使用,我们为每个方法创建新事务为:

@Transactional
Class MyService {
@Transactional(propagation = PROPAGATION.REQUIRES_NEW)
def myMethod(){
throw new Exception();
}
}

注释@Transactional(传播 = 传播。REQUIRES_NEW( 这将为该方法创建一个新事务并挂起现有事务。由于每次执行方法时都会创建新事务,这对于大型多线程应用程序来说肯定是一个性能问题,因此我通过处理服务类内每个方法中的所有可能异常来缓解此问题。这样会更好。

最新更新