【问题标题】:Grails - Transactional Spring noRollbackFor not workingGrails - 事务性 Spring noRollbackFor 不工作
【发布时间】:2013-03-08 07:52:12
【问题描述】:

我正在使用 grails 1.3.7 并具有以下代码:

Grails 服务:

class MyClass {
   static transactional = true

  @Transactional(noRollbackFor = MyException.class)
  public MyObject myMethod(Map map1, Boolean bl1 = false) throws MyException {
   //codes
     if(...){
        throw new MyException("msg")
     }
}

我的异常:

class MyException extends Exception{

 def errors = []

MyException(errors){
    super(errors.toString())
    this.errors = errors
}

}

当代码抛出 MyException 时,我发现以下错误:事务回滚,因为它已被标记为仅回滚

附言。如果我更改 static transactional = true 则不会发生错误。

有什么想法吗?

【问题讨论】:

  • MyClass Spring 是否托管?
  • 假设MyClass 是一个grails 服务,您的方法是否调用了任何其他事务方法?如果是这样,noRollbackFor 可能会丢失。
  • 该方法调用其他领域方法。
  • @codelark 和我要问的是 MyClass 是否是 Grails 服务(或其他 Spring 托管服务)?如果没有,它不会自动参与事务。
  • 控制器调用 Grails 服务“MyClass”。

标签: spring grails spring-transactions


【解决方案1】:

我你用注解,你应该设置

static transactional=false

即使 grails 的事务代理无效,因此与 spring AOP 中的代理没有重叠

【讨论】:

    【解决方案2】:

    这应该可行:

    @Transactional(noRollbackFor=[FooException, BarException])
    def doSomething(...) {
         ...
    }
    

    但请记住,如果您使用事务注释,grails 自动事务在您放置它的服务中不起作用。你需要设置:

    @Transactional
    class myService(...) {
         static transactional = false
         ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 2014-11-25
      • 2017-09-21
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2014-03-07
      相关资源
      最近更新 更多