SQLTransientConnectionException: Connection is not available, request timed out after 60001ms.
阿新 • • 發佈:2019-09-28
資料來源使用的是 Hikari ,
但是 在執行一段時間後爆:
SQLTransientConnectionException: Connection is not available, request timed out after 60001ms.
配置超時確實是 配置了 60s 超時。
百度一般都說是什麼配置問題,會不會是配置問題?
dataSource.setReadOnly(false); //預設false dataSource.setIdleTimeout(50000L); dataSource.setValidationTimeout(3000L); dataSource.setMaxLifetime(50000L);
加上對應配置。
本地跑起來 沒有出現 這個異常了。
但是在 測試環境,發現 過了一段時間還是出現了這個 連線超時異常。
在本地環境運行了 一天 或者更久一點,確實 也出現了這個問題。
看配置最大 連線 數量是 50 。 執行了 50次連線資料查詢之後, 再次 執行的連線查詢,也是 出現連線超時。
一些網友說是 , 連線沒有關閉, 導致 連線數耗盡了,所以再次獲取連線的時候獲取不到,一直到資料來源獲取連線超時了。
如果是這樣似乎是 合理了。
檢視程式碼
Connection connection=null; try { connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { Map<String, Object> resultMap = new HashMap<>(); ResultSetMetaData setMetaData = resultSet.getMetaData(); for (int i = 1; i <= setMetaData.getColumnCount(); i++) { String columnName = setMetaData.getColumnLabel(i); Object value = resultSet.getObject(columnName); resultMap.put(columnName, value); } resultMapList.add(resultMap); } } catch (SQLException e) { log.error("執行統計SQL出錯:{}", sql, e); }
確實沒有關閉連線。
如果是整合spring的話,那麼 會 自動幫我們關閉連線的。
所以這樣子方式的話,必須手動關閉連線。
加個 finally 連線 close() ,問題果然解決了。
參考 https://blog.csdn.net/zhangjunli/article/details/88885776
參考 https://blog.csdn.net/san_yun/article/details/84920175
參考 https://www.iteye.com/blog/qdpurple-1723141
參考 https://www.oschina.net/question/946001_153961