2012-08-02 72 views
1

環境 - 的Grails 2.0.4,甲骨文11GGrails的2.0數據庫連接超時,SockectException

幾個不活動的小時之後,從數據庫中讀取導致產生java.net.SocketException :連接超時。根據其他人提出的解決此問題的建議,我使用屬性更新數據源以保持數據庫連接處於活動狀態。這裏有我看着幾個解決方案 -

One solution
Another solution

它出現的解決方案包括對數據源的設置適當的值。在我的情況下,涉及2個數據源。我試圖做一個會話保持活躍,以避免連接超時。這似乎是通過設置validationQuery屬性和testXXX屬性來完成的。當需要測試時,運行驗證查詢。我認爲下面的配置會給我想要的結果,但我仍然看到超時。我打開了調試

debug 'org.hibernate' 
debug 'jdbc.sqlonly' 

我會期望看到validationQuery運行在一定的時間間隔。基於指定的「6000」ms值,我預計每6秒會看到一次validationQuery。這是數據源規範。我嘗試了這兩種方式。在「屬性」關閉中指定它們並在與「合併」相同的級別指定它們。

dataSource_secondary { 
    logSql = true 
    pooled = true 
    properties { 
     maxActive = 5 
     maxIdle = 5 
     minIdle = 3 
     initialSize = 5 
     minEvictableIdleTimeMillis = 6000 
     timeBetweenEvictionRunsMillis = 6000 
     maxWait = 1000 
     testOnBorrow = true 
     testWhileIdle = true 
     testOnReturn = false 
     validationQuery = "select 1 from dual" 
    } 
} 

我也在調試運行這個並添加一些代碼來BootStrap.groovy中得到的上下文。在dataSource_secondary指定

def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT) 
println 'Added a println allowing me to set a break point and inspect the context.' 

「CTX」 確實有預期值。任何想法,爲什麼我仍然得到套接字異常?

回答

0

找出問題所在。腦死的開發者。我忽略了檢查修復,並沒有使它進入我們的構建環境創建的戰爭。一旦我檢查了Datasource.groovy,一切都很順利,今天早上我沒有看到超時異常。上述解決方案有效。

我仍然困惑爲什麼我在驗證查詢運行時沒有看到調試消息。有沒有人知道正確的log4j條目來查看日誌中的validationQuery?

相關問題