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

时间:2012-07-24 14:46:38

标签: grails quartz-scheduler

环境:Grails 2.0.3,Quartz插件1.0-RC2

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

3 个答案:

答案 0 :(得分:3)

环境:Grails 2.2.0,Quartz插件1.0-RC5

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

作为一种解决方法,我将SessionBinderJobListener类替换为quartz-0.4.2(仅将包更改为新包),并且作业再次运行没有任何问题。所以看起来persistenceInterceptor bean不会关闭连接或将它们返回池中。也许org.codehaus.groovy.grails.orm.hibernate.support.HibernatePersistenceContextInterceptor有一个问题,包括flush和destroy。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我在Quartz插件版本1.0.1中看到了同样的东西。在8日执行时,Job和Tomcat工作程序都冻结了。在作业的withSession块中使用了session.disconnect()并调用了Hibernate finally {}。这就行了。

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

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