2

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

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

4

3 回答 3

3

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

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

作为一种解决方法,我用SessionBinderJobListener来自quartz-0.4.2 的类替换了该类(仅将包更改为新包),并且该作业再次运行而没有任何问题。所以看起来persistenceInterceptorbean 没有关闭连接或将它们返回到池中。org.codehaus.groovy.grails.orm.hibernate.support.HibernatePersistenceContextInterceptor冲洗和销毁可能存在问题。

如果org.quartz.threadPool.threadCount在属性中远小于 maxActive dataSource,则不会出现问题(可能每个作业线程都已经获得了连接)或者它只会花费更长的时间。

于 2013-01-18T11:22:41.403 回答
2

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

于 2012-07-24T15:05:32.843 回答
0

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

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

       ....
     }
   } catch(Exception e) {
      //log it etc.
   } finally {
      hsession?.disconnect()
   }
}
于 2014-03-09T18:44:50.137 回答