daybreaksnow's diary

私を私と呼びたい

[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/