multithreading - 在 grails groovy 中运行线程

标签 multithreading grails groovy session-state

我正在使用 grails “Promise” API 来运行线程。

线程正在执行以下操作

 csv.splitEachLine(',') { row ->
                insertRecord = Code.findByAni(row[0]) ?: new SurveyProActive(
                        cid: row[1],
                        ani: row[0],
                        data_time: new Date(),
                        dnis: Code2.findById((Long) row[2])?.dialNumber,

                ).save(failOnError: true, flush: true)
            }
        }

我只是不知道如何解决我面临的问题。

无论如何,我得到以下异常(exception)
ERROR org.grails.web.errors.GrailsExceptionResolver - HibernateException occurred when processing request: [POST] /Survey/proactiveSurvey - parameters:
a: 17
No Session found for current thread. Stacktrace follows:
org.hibernate.HibernateException: No Session found for current thread
at org.grails.orm.hibernate.GrailsSessionContext.currentSession(GrailsSessionContext.java:116)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:176)
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:170)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.buildQuery(AbstractFindByFinder.java:44)
at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:29)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:318)
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:27)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:174)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:374)
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:173)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.staticMethodMissing(GormEntity.groovy:749)
at com.ef.apps.pcs.SurveyController$_proactiveSurvey_closure4.doCall(SurveyController.groovy:334)
at org.grails.plugins.web.async.WebRequestPromiseDecorator.invokeClosure(WebRequestPromiseDecorator.groovy:43)
at org.grails.plugins.web.async.WebRequestPromiseDecorator$_decorate_closure1.doCall(WebRequestPromiseDecorator.groovy:30)
at groovyx.gpars.group.PGroup$3.call(PGroup.java:289)
at groovyx.gpars.group.PGroup$4.run(PGroup.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

最佳答案

在此处查看“多个异步 GORM 调用”部分:http://docs.grails.org/latest/guide/async.html#asyncGorm .它说Domain.async.task{}为您处理将新 session 绑定(bind)到异步线程,而 Promises.task才不是。

如果您无法使用 Domain.async.task{}你也可以试试Domain.withNewSession{}方法。

关于multithreading - 在 grails groovy 中运行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888957/

相关文章:

grails - Grails-将链接href添加到按钮

javascript - 使用grails生成html id的最佳实践

regex - groovy 正则表达式

groovy - 如何在Jenkins的描述中添加新行

c# - 关于c#中的线程

multithreading - 为什么Intel TBB不提供boost之类的条件变量?

java - GWT 可以吗?如果是这样,我们可以使用的最好的后端 Java 技术是什么?

sql - Groovy SQL 忽略动态 select 语句中的 order by 子句

multithreading - 使用多线程渲染时必须使用辅助命令缓冲区吗?单队列与多队列怎么样?

python - eventlet tpool 有什么用?