【发布时间】:2012-09-10 02:39:40
【问题描述】:
我有一个关于 Quartz 和在 Service 类中运行线程的问题。
我之前的问题得到了回答:Grails background process,但是我还有另一个问题。
设置:我有一个设置为运行服务的作业,它运行良好。但是在服务类中,我有一个可以并行运行的算法。
问题: 通常我会以以下非常简单的方式将代码设置为并行运行:
Item.each {
Thread.start {
do some calculations here
write to DB
}
}
但是,由于我的代码需要写入数据库并且我需要利用域类,因此我的代码会刹车。 Hibernate 抱怨线程无权访问某些东西。
我不确定为什么我不能在 Service 类中使用线程并利用域类。有人可以帮我解决这个难题吗? 我需要以特殊方式创建线程吗?可能我不应该在 Service 类中创建线程(因为 Service 类似乎在线程中运行)?我需要将我的代码移动到 Job 类中吗?
请帮忙。
谢谢。
【问题讨论】:
-
尝试查看执行器插件并将对服务的调用包装为:runAsync { service.serviceMethod() }
-
进一步了解@Steve 所说的,默认情况下,新线程不会附加休眠会话(使用休眠需要它)-因此您看到的错误.执行器插件为您管理附加休眠会话(事实上,石英插件也是如此)。
标签: grails groovy quartz-scheduler