服务内部的 Grails Quartz 和线程

标签 grails groovy quartz-scheduler

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

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

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

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

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

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

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

请帮忙。

谢谢你。

最佳答案

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

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

您也可以查看 GPars一个易于使用的并行化框架。

关于服务内部的 Grails Quartz 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344798/

相关文章:

grails - groovy httpbuilder 工作但 grails 给出对等未验证错误

Groovy 将路径拆分为名称和父级

java - 当应用程序有两个实例时如何避免同时执行quartz作业

unit-testing - PageRenderer 在单元测试期间返回空对象

gradle - 从 Gradle 项目运行可执行文件时在 JavaFX 中捆绑?

java - 如何使带有调度程序(Quartz)的应用程序可手动测试?

spring-boot - 使用 Spring Boot 在 Quartz 中触发器自动进入错误状态

grails - 为什么在NetBeans IDE 8.0.2中创建后看不到grails应用程序

grails - 不同时间格式的Grails字段模式

grails - Grails 中按关联计数排序