grails事务控制器,处理异常

时间:2014-12-24 15:01:12

标签: grails grails-controller

我的控制器中有以下方法:

@Transactional
    def update(Filter filterInstance) {
        bindData(filterInstance, params, [include: ['name, 'code', 'value']])

        filterService.update(filterInstance)
        mappingService.update(filterInstance)

        respond  filterInstance
    }

我需要在这里使用 @Transactional ,因为我调用多个服务。如何处理因某种原因交易失败的情况?我应该使用尝试捕捉还是可能还有其他方式?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果你在控制器动作中有代码,你必须留意两件事:

  • 交易性(使用try / catch / finally等)
  • 在TX-success / -failure的情况下,该动作应该返回/渲染。

这很复杂,所以你应该把服务调用放到另一个服务方法中,你只需处理这些事务。

控制器操作是一个地方,您可以在其中触发非常简单的一步交易。如果您需要实现更复杂的TX逻辑,请在服务层

上执行

请参阅ref-doc了解如何控制多步骤交易。

您可以使update()方法返回false或抛出异常,如果发生这种情况,请调用status.setRollbackOnly()。不要忘记使用update()

标记@Transactional(propagation = Propagation.SUPPORTS)方法
相关问题