設置一個Thread在背景跑動,
但是當要到DB查詢時就會報錯,
請大神們解答謝謝
Exception in thread "Thread-3" org.hibernate.HibernateException: No Session found for current thread
at org.grails.orm.hibernate.GrailsSessionContext.currentSession(GrailsSessionContext.java:117)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:721)
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:182)
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:175)
at org.grails.datastore.gorm.finders.FindAllByFinder.buildQuery(FindAllByFinder.java:63)
at org.grails.datastore.gorm.finders.FindAllByFinder$1.doInSession(FindAllByFinder.java:47)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42)
at org.grails.datastore.gorm.finders.FindAllByFinder.doInvokeInternal(FindAllByFinder.java:45)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:254)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:392)
at org.grails.datastore.gorm.finders.FinderMethod$invoke$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.grails.datastore.gorm.finders.FinderMethod$invoke$0.call(Unknown Source)
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:181)
at sun.reflect.GeneratedMethodAccessor271.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
at groovy.lang.Closure.call(Closure.java:420)
at org.codehaus.groovy.runtime.metaclass.ClosureStaticMetaMethod.invoke(ClosureStaticMetaMethod.java:62)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at com.psquare.space1.Space1Controller$1.run(Space1Controller.groovy:675)
at java.lang.Thread.run(Thread.java:748)
def static sendApi() {
new Thread(new Runnable() {
@Override
void run() {
Thread.sleep(10000)
def tags = S1_Tag.findAllByUserIsNotNull()
def currentPosition = S1_CurrentPos.findAllByTagInList(tags)
def exclusion = S1_Exclusion.findAllByIsSelected(1)
def alert = LocatorStatus.findAllByStatusNotEqual(1);
def object = new JSONObject()
def temp;
def temp1;
def objArr = new JSONArray();
def objArr1 = new JSONArray();
alert.each { val ->
temp1 = new JSONObject();
temp1.put("type", "device_down")
temp1.put("locator_id", val.id)
temp1.put("connection_status", val.status.toString())
temp1.put("floor", val.floor.toString())
temp1.put("name", val.name.toString())
temp1.put("time", new Date(val.time.getTime()).format("yyyy-MM-dd HH:mm:ssZ"))
objArr1.put(temp1)
}
看下这篇文章是否对你有帮助 https://blog.csdn.net/pmt1982/article/details/38731127