在我的grails应用程序中,我经常得到 org.springframework.transaction.HeuristicCompletionException:启发式完成:回滚结果状态;嵌套异常是org.springframework.transaction.UnexpectedRollbackException:事务已回滚,因为它已标记为仅回滚 。我以某种方式发现,当@Transactional注释并在具有自己的@Transactional的方法内部调用的方法内发生任何类型的异常时,就会发生这种情况。我的查询是否可以简单地捕获并忽略此异常?
答案 0 :(得分:1)
我有一个解决方法,正如Sudhir在评论中所建议的,我可以在其中一个方法中复制启发式完成问题,并发现不回滚服务的现有事务使用,我们为每个方法创建新事务:
@Transactional
Class MyService {
@Transactional(propagation = PROPAGATION.REQUIRES_NEW)
def myMethod(){
throw new Exception();
}
}
注释@Transactional(propagation = PROPAGATION.REQUIRES_NEW)这将为方法创建一个新的Transaction并暂停现有的事务。因为这会在每次执行方法时创建新的事务,这对于巨大的多线程应用程序来说肯定是一个性能问题所以我通过处理服务类中每个方法中的所有可能异常来缓解这个问题。这会更好。