行く記憶の流れは絶えずして

戻ってこないのでメモするところ

Dropwizardをデプロイ後、8時間後にDB接続エラー

デプロイしていよいよ起動、明くる日に様子を見るとページからログインできない。
ログインボタンを押してもレスポンスがない。
応答を見ると[500 Internal Server Error]。
バグ?ログを見てみると以下。

f:id:taketsuru:20150503013213p:plain


とか出ている。autoReconnect=trueにすると解決すると誘われている。

デフォルトでは最後の接続から8時間経つと切断されるらしい。

調べるとmysqlのpathの最後に?autoreconnect=trueで解決するとか。

しかし非推奨で、コネクションプーリングしなさいとのこと。
dropwizard特有のやり方とかあるんじゃないのとさらに調べる。

見つかる。例によって外人。

java - Broken Pipe exception in Dropwizard application - Stack Overflow

 

  1. 設定+αで解決した報告

    • checkConnectionWhileIdle: true
    • checkConnectionOnReturn: true
    • checkConnectionOnBorrow: true


    とソースのトランザクション境界で直ったらしい。(関係ない気がするけど)
    自分のやつはユーザー認証と掲示板読み書き程度、それぞれでAbstractDAOの継承クラスによるアクセスと@UnitOfWorkをつけているのでいいはず。

  2. コネクションプーリングしなさい

    1の投稿のすぐ下にある。Manageを使おうとのこと。
    ManagedPooledDataSource.javaとかいうド直球なソースが紹介されているけど、
    これとdropwizard-hibernateを絡ませなきゃいけない。すぐには手が出せそうにないので後回し。

今回は1の方法で、最後の接続から8時間後に接続して解決したのでひとまず良しとします。