2015-11-15 11 views
6

私はHikariCPの文書で見つけられなかった答えを皆さんにお願いします。 光をどのようにリサイクルしていますか?

minimumIdle 1 
idleTimeout 10 minutes 
maxLifeTime 20 minutes 

私のアプリがアイドル状態のまま

夜の間に(誰も作っ要求で)、私は最後の接続がされた後、ひかりは10分接続の最後の要求後の各接続を閉じることを期待:与えられた私は、以下のプールパラメータを設定しました新しいプールを作成し(プール内に保持する)、20分ごとにこのアイドル状態の接続を閉じて再作成します。 私は正しく理解しましたか?

WARN c.z.hikari.proxy.ConnectionProxy - Connection [email protected] <POOL_NAME> marked as broken because of SQLSTATE(08003), ErrorCode(17008). 
java.sql.SQLRecoverableException: Closed Connection 

接続はおそらく、Oracleによって閉鎖されており、使用することはできません。

事実は、私のアプリのアイドル期間の後、私は(次のリクエストuppon)次の例外を参照してくださいということです。私は上記の設定を使用してこれを回避しようとします。もう一つのポイントは、プールからクローズド・コネクションが得られる理由が分からないことです。ヒカリがそれを返す前にコネクションの状態をテストするので、これは決して起こらないはずです...

注:私はDBの所有者ではありません。私はそれを構成することはできません。私はその設定にアクセスすることもできません。

私たちのセットアップは春4.1.6、JPA 2.1 APIと4.3.7を休止、ひかり2.1.0

答えて

2

あるプールパラメータのあなたの理解は正しいです。 Oracleインスタンスのアイドル・タイムアウトが10分より短い可能性があります。あなたができることの1つは、com.zaxxer.hikariパッケージのDEBUGレベルロギングを有効にすることです。あなたは、あまりにも騒々しいことなく、HikariCP内で何が起こっているのかについてさらに多くの情報を得るでしょう。

ログはissue on Githubとして自由に投稿してください。

+0

[OK]をクリックすると、便利なログが表示されます。 hikariが閉じたConnectionを返すのはどういう意見ですか?私はOracle 11gの最後のJDBCドライバを使用しているので、isValid()が動作するはずです。私は、Hibernateが閉じられた接続でクエリを実行しようとすると、この素敵なSQLExceptionを見ます。だから私は間違いなく閉じたConnectionをプールから取得します。 –

+0

私は、OracleドライバがJDBC4 isAlive()APIを適切に実装しているとはかなり確信していましたが、代わりにconnectionTestQueryを設定してみてください。設定されていれば、代わりにHikariCPがそれを使用します。注意:SpringやHibernateが(何らかの形で)セッションのコネクションをキャッシングしていないことを確認してください。 – brettw

+0

私はより多くの情報を得ました。アプリケーションの起動時に接続リークが発生しているようです。ユーザインタラクションの結果としての最初のリクエストの前であっても。だから我々はこれを調べなければならない。私はより多くの情報を持っているときに私はあなたにさらに通知します。 hikariデータソース統計ログに感謝します。 :-) –

関連する問題