1

我有一个关于 Quartz 和在 Service 类中运行线程的问题。

我回答了我之前的问题:Grails background process,但是我还有另一个问题。

设置:我有一个设置为运行服务的作业,它运行良好。但是在服务类中,我有一个可以并行运行的算法。

问题:通常我会以以下非常简单的方式将代码设置为并行运行:

Item.each {
   Thread.start {
      do some calculations here    
      write to DB
   }
}

但是,由于我的代码需要写入数据库并且我需要利用域类,因此我的代码会刹车。Hibernate 抱怨线程无权访问某些东西。

我不确定为什么我不能在 Service 类中使用线程并利用域类。有人可以帮我解决这个难题吗?我需要以特殊方式创建线程吗?可能我不应该在 Service 类中创建线程(因为 Service 类似乎在线程中运行)?我需要将我的代码移动到 Job 类中吗?

请帮忙。

谢谢你。

4

1 回答 1

1

默认情况下,新线程不会绑定 Hibernate Session。要附加休眠会话,请尝试以下操作:

Item.each {
    Thread.start {
        Item.withTransaction {
            do some calculations here    
            write to DB
        }
    }
}

您还可以查看GPars以获得易于使用的并行化框架。

于 2012-09-10T14:19:11.943 回答