ask*_*dev 4 service session grails hibernate quartz-scheduler
一个简单的场景,但让我头撞墙,因为我无法理解这个'没有Hibernate会话绑定到当前线程'.
用例实现:
def records = SomeDomain.list()
//split records into equal size chunks.
def chunks = [][] // <- add records to chunks
//now process each chunk in a different thread
chunks.each { aChunk ->
Thread.start {
singletonInjectedService # processs(aChunk)
}
}
Run Code Online (Sandbox Code Playgroud)
如何在grails中实现这一目标?无论容器是什么,Quartz Job想要处理多个线程中的'记录',或者想要在多个线程中处理'记录'的服务,它只是失败了'没有hibernate会话绑定到当前线程'.
一个合法的用例,但可惜它根本不适合我.
hvg*_*des 13
当您尝试以异步方式管理自己的线程时会发生这种情况.在Web应用程序中,当请求进入时,它由容器在线程中处理.容器/弹簧通常将一些资源绑定到执行线程,即当前的hibernate会话等资源.当您启动自己的线程时,当前线程上的现有资源不会神奇地出现在您的新线程上.
当你管理自己的线程时,会发生奇怪的事情.
也就是说,域类上有一个withTransaction方法,在此处记录:http://grails.org/doc/latest/ref/Domain%20Classes/withTransaction.html, 它应该解决您的问题.
还有一个后台线程插件,在这里看到http://grails.org/BackgroundThread+Plugin声称为你处理hibernate会话问题.
归档时间: |
|
查看次数: |
3543 次 |
最近记录: |