环境:Grails 2.0.3,Quartz 插件 1.0-RC2
我有一个简单的石英作业,可以从数据库中读取一个值。在第 8 次执行时,作业在从数据库读取时冻结。还有一个从数据库中检索值的网页。一旦 Job 进入等待状态,尝试通过网页读取值也会冻结。
环境:Grails 2.0.3,Quartz 插件 1.0-RC2
我有一个简单的石英作业,可以从数据库中读取一个值。在第 8 次执行时,作业在从数据库读取时冻结。还有一个从数据库中检索值的网页。一旦 Job 进入等待状态,尝试通过网页读取值也会冻结。
环境: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
冲洗和销毁可能存在问题。
如果org.quartz.threadPool.threadCount
在属性中远小于 maxActive dataSource
,则不会出现问题(可能每个作业线程都已经获得了连接)或者它只会花费更长的时间。
数据源连接池的默认大小是 8,因此您可能没有正确关闭连接以将它们返回到池中。
我在 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()
}
}