[Hibernate]JDBCConnectionExceptionへの対応
hibernateを使ってSQL Serverへ接続を行う際、毎朝実行されるジョブで以下の例外が発生することがあった。
・org.hibernate.exception.JDBCConnectionException: could not execute query
-Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Read timed out
-Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
・AbstractBatcher - exception clearing maxRows/queryTimeout
com.microsoft.sqlserver.jdbc.SQLServerException: 接続は閉じられています。
原因は接続が切れてしまったコネクションを使いまわしてしまっていることだった。
hibernateのコネクションプールの設定にvalidationQueryを追加することで、無効になったコネクションかどうかを自動判別するようにする用に修正し、
例外が発生しないようになった。
また、この例外はSQL Server Managerment Studio上でコネクションを強制切断することで再現ができた。
sp_who でコネクション一覧を表示
kill sp_idで対象のコネクションを切断
参考URL
https://forum.hibernate.org/viewtopic.php?p=2394730
http://6by9.wordpress.com/2009/06/18/tomcatjetty-dbcp-and-stale-connections/