系統配置了達夢數據源以第二連接池的方式,但是過了一段時間后發現數據庫服務無法正常訪問,訪問返回錯誤
現在問題就是生產上那個數據源一訪問報錯,提示org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed
但是重啟該應用后該數據源又能正常訪問。
由於該數據源源服務是為多方應用提供數據庫服務,因此我們認為該服務是正常的,問題大概率出現在應用層。
通過這篇博客(https://www.cnblogs.com/yadongliang/p/12492419.html)
初步定為懷疑是數據庫連接超時失效了,但是未被回收,導致使用的連接為失效連接,而上訴博客中也是相似問題,定位原因是數據庫連接超時后,與數據庫服務方網絡連接會話失效,導致數據庫連接不可用。
訪問weblogic測試環境,數據源連接池配置
參考博客(https://www.cnblogs.com/didispace/p/12291832.html,https://www.cnblogs.com/jefflau/archive/2013/01/06/3244293.html)
登錄weblogic控制台頁面,點擊左側菜單欄中“服務”-》“數據源”,點擊szwy2(JNDI數據源名稱),點擊“連接池”頁簽,然后點擊下方的“高級”按鈕,勾選“保留時測試連接”勾選框,“測試表名稱”里填入dual,“非活動超時”里填寫30。如下圖所示。
主要是設置非活動連接超時,清除連接池中失效的連接,以保證應用下次向連接池中獲取的連接都是可用的數據庫連接。
設置以上參數后,問題解決。
根本原因:數據庫連接池未配置相應參數,導致連接池中失效連接未清除,應用請求數據庫連接時,獲取到了失效的連接,無法正常訪問數據庫。