My Grails Service调用一个引发运行时异常的插件。在我的情况下,我不关心异常,所以它被吞噬了。
MyGrailsService {
def myMethod {
...
try {
//callPlugin
} catch (Exception ex) {
...
}
}
}
一切正常,异常被捕获并继续处理。但是,在我的Controller中,我有一个catch (Throwable t)
块,我不希望它被执行,因为吞下了异常。事实证明catch (Throwable t)
块已执行,因为Grails会抛出一个org.springframework.transaction.UnexpectedRollbackException
当然我不希望它这样做。我想我得到了这个,因为插件抛出的异常是运行时,所以Grails回滚事务。
我不希望抛出此UnexpectedRollbackException
。
任何提示?
答案 0 :(得分:0)
我会做的是
class MyService{
static transactional = false
def myMethod {
...
try {
//callPlugin
} catch (Exception ex) {
...
}
}
@Transactional(readOnly = true)
def someMethod {
// Some code here
}
}
上面的代码将使服务中的所有方法都是非事务性的,我们将明确地使方法成为我们想要的事务。
然而,再一件事可能是要处理的一点,你正在调用的插件的方法,该方法本身可以是一个事务方法,它可能会被回滚并抛出一个UnexpectedRollbackException。因此,如果插件方法是事务性的,则必须检查一次。