我的Grails服务存在一个问题,即与事务无关的吞噬异常导致事务回滚,即使它与域对象的持久性无关。如何防止异常导致Grails下的事务回滚?
在我的服务我沿着
updateSomething(domainObj) {
def oldFilename = domainObj.filename
def newFilename = getNewFilename()
domainObj.filename = newFilename
domainObj.save(flush: true)
try {
cleanUpOldFile(oldFilename)
} catch (cleanupException) {
// oh well, log and swallow
}
}
线的东西我所看到的是,当我有,当我清理旧文件例外,我还是记录它,把它吞,但它导致事务回滚,即使我已经完成更新域对象。
如何限制范围事务在清理之前完成,或者有另一种方法来清理异常以避免回滚?
只是因为我使用Grails 2.1.1
有一件事我不完全明白,不应该我的catch块捕获所有异常,运行时和检查? Spring如何知道我有什么异常? – 2013-04-05 00:51:56
我认为它是注意到服务层之间的异常,在我的情况下,我有一个服务层与另一个服务层交谈。这是唯一对我有意义的事情。 – 2013-04-05 01:04:55
如果您只需将@Transactional(noRollbackFor = [FooException,BarException])添加到cleanUpOldFile(),那么对类中的每个其他方法会有什么影响?他们仍然是交易型的吗? – 2014-08-25 15:51:28