java.sql.SQLException: I/O Error: Connection reset by peer: socket write error
at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1065)
at net.sourceforge.jtds.jdbc.TdsCore.microsoftPrepare(TdsCore.java:1191)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareSQL(ConnectionJDBC2.java:693)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:978)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
主要原因還是在 Tomcat 的 connection pool 與 DB Server 斷線所引起。
重啟server即可
tomcat相關設定
maxWait="3000" 從池中取連線的最大等待時間,單位ms.
initialSize="10" 初始化連線
maxIdle="60" 最大空閒連線
minIdle="10" 最小空閒連線
maxActive="80" 最大活動連線
validationQuery = "SELECT 1" 驗證使用的SQL語句
testWhileIdle = "true" 指明連線是否被空閒連接回收器(如果有)進行檢驗.如果檢測失敗,則連線將被從池中去除
testOnBorrow = "false" 借出連線時不要測試,否則很影響效能
timeBetweenEvictionRunsMillis = "30000" 每30秒執行一次空閒連接回收器
minEvictableIdleTimeMillis = "1800000" 池中的連線空閒30分鐘後被回收
numTestsPerEvictionRun="10" 在每次空閒連接回收器執行緒(如果有)執行時檢查的連線數量
removeAbandoned="true" 連線洩漏回收引數,當可用連線數少於3個時才執行
removeAbandonedTimeout="200" 連線洩漏回收參數,200秒,洩露的連線可以被刪除的超時值。當連線時間大於200秒,不等資料庫回應就砍連線。
removeAbandonedTimeout 屬性是設定資料庫連線被釋最多空閒時間多少秒之後設定為空閒。預設移除廢棄連線的時間為300秒。