環境 - 的Grails 2.0.4,甲骨文11GGrails的2.0數據庫連接超時,SockectException
幾個不活動的小時之後,從數據庫中讀取導致產生java.net.SocketException :連接超時。根據其他人提出的解決此問題的建議,我使用屬性更新數據源以保持數據庫連接處於活動狀態。這裏有我看着幾個解決方案 -
它出現的解決方案包括對數據源的設置適當的值。在我的情況下,涉及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」 確實有預期值。任何想法,爲什麼我仍然得到套接字異常?