Grails Quartz插件在第8次执行时冻结

Grails Quartz插件在第8次执行时冻结,grails,quartz-scheduler,Grails,Quartz Scheduler,环境:Grails2.0.3,Quartz插件1.0-RC2 我有一个简单的quartz任务,它从数据库中读取一个值。在第8次执行时,作业在从数据库读取时冻结。还有一个从数据库检索值的网页。一旦作业进入等待状态,尝试通过网页读取值也会冻结。数据源连接池的默认大小为8,因此您可能没有正确关闭连接以将其返回池。环境:Grails 2.2.0,Quartz plugin 1.0-RC5 我在使用quartz-1.0-RC5时遇到了同样的问题 作为一种解决方法,我用quartz-0.4.2中的类替换了S

环境:Grails2.0.3,Quartz插件1.0-RC2


我有一个简单的quartz任务,它从数据库中读取一个值。在第8次执行时,作业在从数据库读取时冻结。还有一个从数据库检索值的网页。一旦作业进入等待状态,尝试通过网页读取值也会冻结。

数据源连接池的默认大小为8,因此您可能没有正确关闭连接以将其返回池。

环境:Grails 2.2.0,Quartz plugin 1.0-RC5

我在使用quartz-1.0-RC5时遇到了同样的问题

作为一种解决方法,我用quartz-0.4.2中的类替换了
SessionBinderJobListener
类(仅将包更改为新包),然后作业再次运行,没有任何问题。因此,
persistenceInterceptor
bean似乎不会关闭连接或将它们返回到池中。使用flush和destroy时,
org.codehaus.groovy.grails.orm.hibernate.support.HibernatePersistenceContextInterceptor
中可能存在问题


如果
org.quartz.threadPool.threadCount
dataSource
属性中比maxActive小得多,则问题不会出现(可能每个作业线程已经建立了连接),或者只需要更长的时间。

我在quartz插件版本1.0.1中看到了同样的情况。在第8次执行时,作业和Tomcat工作人员都冻结。在作业的
finally{}
块中使用
with session
并调用Hibernate
session.disconnect()
。这就成功了

def execute() {
   def hsession
   try {
     DomainObject.withSession { ses ->
       hsession = ses

       ....
     }
   } catch(Exception e) {
      //log it etc.
   } finally {
      hsession?.disconnect()
   }
}

降级到插件的0.4.2版本纠正了这个问题。工作代码相同。我浏览了插件文档,没有注意到任何提到需要显式关闭连接的内容。我想知道这是否是quartz 1.8.5中的一个bug,1.0-RC2插件使用的版本。我在日志中注意到了这一点:07-23-2012 15:30:04调试org.hibernate.cache.StandardQueryCache>>缓存区域中的查询结果:org.hibernate.cache.StandardQueryCache;timestamp=5501251603378176 07-23-2012 15:30:04调试org.hibernate.jdbc.ConnectionManager>>使用on_关闭连接释放模式在会话上完成事务;确保关闭会话以释放JDBC资源!非常聪明,弗兰克!我会把这个寄给石英团队。谢谢