2012-07-24 36 views
2

環境:Grails的2.0.3,石英插件1.0-RC2Grails的石英插件凍結

我有一個從數據庫中讀取一個值的簡單石英工作。在第8次執行時,Job從數據庫讀取時凍結。還有一個網頁從數據庫中檢索值。一旦Job進入等待狀態,嘗試通過網頁讀取值也會凍結。

回答

2

數據源連接池的默認大小爲8,因此您可能沒有正確關閉連接以將它們返回到池中。

+1

降級到0.4.2版本的插件糾正了這個問題。與作業相同的代碼。我瀏覽了插件文檔,並沒有注意到任何提到需要明確關閉連接的內容。我不知道這是否是石英1.8.5中的錯誤,1.0-RC2插件使用的版本。 – ptsw 2012-07-24 15:58:05

+0

我在日誌中注意到了這一點:07-23-2012 15:30:04 DEBUG org.hibernate.cache.StandardQueryCache >>在區域中緩存查詢結果:org.hibernate.cache.StandardQueryCache; timestamp = 5501251603378176 07-23-2012 15:30:04 DEBUG org.hibernate.jdbc.ConnectionManager >>事務在使用on_close連接釋放模式的會話上完成;一定要關閉會話以釋放JDBC資源! – ptsw 2012-07-24 16:04:46

3

環境:Grails的2.2.0,石英插件1.0-RC5

我遇到了同樣的問題使用石英-1.0-RC5。

作爲一種解決方法,我用來自quartz-0.4.2的類替換了SessionBinderJobListener類(僅將包更改爲新包),並且作業再次運行時沒有任何問題。所以它看起來像persistenceInterceptor bean不會關閉連接或將它們返回到池中。也許在org.codehaus.groovy.grails.orm.hibernate.support.HibernatePersistenceContextInterceptor有一個問題與沖洗和摧毀。

如果org.quartz.threadPool.threadCountdataSource屬性中的maxActive小得多,則不會出現該問題(可能每個作業線程都已獲得其連接),否則將只需要更長的時間。

+0

非常聰明的弗蘭克!我會把這件事發給石英團隊。謝謝! – ptsw 2013-01-18 15:27:04

+0

增加的問題 - http://jira.grails.org/browse/GPQUARTZ-113 – ptsw 2013-01-18 15:38:13

0

我在Quartz插件版本1.0.1中看到了同樣的情況。在第八次執行時,Job和Tomcat工作者都凍結了。使用withSession並在作業的finally {}塊中調用Hibernate session.disconnect()。那就是訣竅。

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

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