MySql 「Communications link failure」 の調査結果
このエラーですが、、
org.springframework.transaction.CannotCreateTransactionException: Could
not open JDBC Connection for transaction; nested exception is
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 28,777,888 milliseconds ago. The last packet sent successfully to the server was 7 milliseconds ago.
原因はMySqlによるコネクションのタイムアウトっぽいことが判明・・・
MySqlはデフォルトだと8時間でコネクションが切れるようで
コネクションをプールしていても、8時間未使用だと切断されるみたい、、
そこで対策として以下を設定することにした
maxActive = X
minIdle = X
maxIdle = X
numTestsPerEvictionRun = X
→ 1回の監視処理でチェックするアイドル接続数の最大値を指定
デフォルト値は3
timeBetweenEvictionRunsMillis
→ プール内のアイドル接続の監視スレッドを開始
ミリ秒指定
validationQuery= selec 1
→ 接続が有効であることを確認するためのSQL文を記述します。
testOnBorrow= false
→ プールから取得する際に接続の有効性を確認
デフォルト「true」、validationQueryが指定されてないと「false」で上書きされる
使用する場合例外のハンドリングが必要
testWhileIdle= true
→ 監視処理時アイドル接続の有効性を確認
デフォルト「false」
要はkeepAlive的なことをやりましたと、、
org.springframework.transaction.CannotCreateTransactionException: Could
not open JDBC Connection for transaction; nested exception is
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 28,777,888 milliseconds ago. The last packet sent successfully to the server was 7 milliseconds ago.
原因はMySqlによるコネクションのタイムアウトっぽいことが判明・・・
MySqlはデフォルトだと8時間でコネクションが切れるようで
コネクションをプールしていても、8時間未使用だと切断されるみたい、、
そこで対策として以下を設定することにした
maxActive = X
minIdle = X
maxIdle = X
numTestsPerEvictionRun = X
→ 1回の監視処理でチェックするアイドル接続数の最大値を指定
デフォルト値は3
timeBetweenEvictionRunsMillis
→ プール内のアイドル接続の監視スレッドを開始
ミリ秒指定
validationQuery= selec 1
→ 接続が有効であることを確認するためのSQL文を記述します。
testOnBorrow= false
→ プールから取得する際に接続の有効性を確認
デフォルト「true」、validationQueryが指定されてないと「false」で上書きされる
使用する場合例外のハンドリングが必要
testWhileIdle= true
→ 監視処理時アイドル接続の有効性を確認
デフォルト「false」
要はkeepAlive的なことをやりましたと、、