环境:Grails 2.0.3,Quartz插件1.0-RC2
我有一个简单的石英作业,它从数据库中读取一个值。在第8次执行时,作业在从数据库读取时冻结。还有一个网页可以从数据库中检索值。一旦Job进入等待状态,尝试通过网页读取值也会冻结。
答案 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.threadCount
在dataSource
属性中远小于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()
}
}