19

MySqlのコネクタJドライバの構成リファレンスでは、 autoReconnectプロパティの使用に関して警告エンプターが発行されます。指示に従い、サーバーのwait_timeoutを増やしました。私はDBCPを使用しているので(StackoverflowがDBCPを撃墜するいくつかの投稿を読んだ後、c3poに移行することを検討しています)、autoReconnectForPoolsプロパティを使用しても大丈夫ですか?DBCPまたはその他の接続プールで有効にすると、実際に何が行われますか?

4

3 に答える 3

16

autoReconnect はクライアントに SQLException をスローしますが、接続の再確立を試みます。

autoReconnectForPools は、各 SQL 実行の前にサーバーに ping を試行します。

過去に dbcp で多くの問題、特に切断がありました。ほとんどはc3p0に移動することで解決されました。mysql ドライバーには c3p0 の接続テスター (com.mysql.jdbc.integration.c3p0.MysqlConnectionTester) があることに注意してください。

また、これを確認することもできます: JDBC を使用した接続プール オプション: DBCP と C3P0 の比較

于 2009-04-02T14:34:31.893 に答える
9

MySQL のautoReconnect機能は、多くの問題があるため非推奨です (参照: 公式ドキュメント)。

autoReconnectForPoolsとはほとんど関係がなく、and とautoReconnectは関係がautoCommitありますreconnectAtTxEnd- 3 つすべてがtrueの場合、各トランザクションの最後にサーバーに ping を実行し、必要に応じて自動的に再接続します。

DBCP の接続検証は不完全testOnBorrowです。設定されている場合でも、プールから壊れた接続が返されることがあります (すべての借用前に接続をテストすることは非常に非効率的であることは言うまでもありません)。

この記事によると、HikariCP はisValid()、テスト クエリを実行するよりもはるかに高速なJDBC4 API を使用でき、切断された接続をクライアント アプリケーションに返さないように特別に設計されているため、より優れたプール実装のようです。

于 2015-04-06T19:07:15.790 に答える
2

DBCP を正しく使用していますか?

短い構成メモによると、デフォルト値testOnBorrow=true(使用前に接続をテストし、失敗した場合はプールから削除され、代わりに新しいものを取得しようとする)のおかげで、タイムアウトを適切に処理することになっています。

必要な唯一のことは、プロパティを null 以外の文字列に設定することですvalidationQuery。たとえば、MySQL データベースの場合は「SELECT 0」です (ここでは、使用される DB ごとに異なる validationQuery 値に関する投稿があります)。

于 2012-06-06T05:32:42.823 に答える