問題タブ [apache-commons-dbcp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - dbcp での PreparedStatement プーリングの使用
dbcp を使用して準備された接続プールをどのように使用できるかを誰かが説明できますか? (可能であれば、いくつかのサンプルコードを添えて)。私はそれをオンにする方法を見つけました - KeyedObjectPoolFactory を PoolableConnectionFactory に渡します。しかし、その後、特定の準備済みステートメントをどのように定義する必要があるのでしょうか? 現在、プールから接続を取得するために PoolingDataSource のみを使用しています。プールから準備済みステートメントを使用するにはどうすればよいですか?
java - DBCP (Apache Commons Database Connection Pooling) はまだ関連していますか?
JDBC 3.0 仕様では、接続 (およびプリペアド ステートメント) プーリングについて説明しています。
接続プールを提供するために DBCP を使用しているスタンドアロンの Java プログラムがいくつかあります (つまり、アプリケーション サーバーは使用していません)。DBCP を使い続ける必要がありますか、それとも JDBC が提供するプーリングを利用して DBCP を取り除くことができますか?
MySQL (Connector/J) を使用しており、最終的には SQL Server サポート (jTDS) を追加する予定です。他のデータベースをサポートする可能性はほとんどありません。
編集: 接続プーリング ライブラリを排除しようとする試みについては、以下のコメントを参照してください。DBCP は依然として関連しているようです (一部のコメンターは、DBCP よりも C3P0 を推奨していることに注意してください)。
java - MySqlコネクタ/JのautoReconnectとautoReconnectForPoolsの違いは何ですか?
MySqlのコネクタJドライバの構成リファレンスでは、 autoReconnectプロパティの使用に関して警告エンプターが発行されます。指示に従い、サーバーのwait_timeoutを増やしました。私はDBCPを使用しているので(StackoverflowがDBCPを撃墜するいくつかの投稿を読んだ後、c3poに移行することを検討しています)、autoReconnectForPoolsプロパティを使用しても大丈夫ですか?DBCPまたはその他の接続プールで有効にすると、実際に何が行われますか?
java - DUAL から 1 を選択: MySQL
クエリ ログに目を通すと、説明のつかない奇妙なパターンが見つかりました。
実質的にすべてのクエリの後、「DUALから1を選択」しました。
これがどこから来ているのかわかりません。また、クエリを明示的に作成していません。
ログは基本的に次のようになります。
以前にこの問題に遭遇した人はいますか?
MySQL バージョン: 5.0.51
ドライバー: JDBC を使用する Java 6 アプリ。mysql-connector-java-5.1.6-bin.jar
接続プール: commons-dbcp 1.2.2
validationQuery は「DUAL から 1 を選択」(明らかに) に設定されており、検証クエリが null 以外の場合、接続プールのデフォルトで testOnBorrow と testOnReturn が true に設定されているようです。
これが私にもたらすもう1つの質問は、実際に検証クエリが必要かどうか、または検証クエリを無効にするか、少なくとも使用頻度を減らすことでパフォーマンスを向上できるかどうかです。残念ながら、私たちの「データベースマネージャー」を書いた開発者はもう私たちと一緒にいないので、彼にそれを正当化するように頼むことはできません. 任意の入力をいただければ幸いです。しばらくの間、API と Google を掘り下げて、価値のあるものが見つかったら報告します。
編集:さらに情報を追加
EDIT2:後でこれを見つけた人のために、正解で求められた情報を追加しました
tomcat - Tomcatのcontext.xmlファイルを使用してDBCPリソースを宣言するのはなぜですか?
なぜcontext.xmlファイルを使用してリソース(私の場合はデータベース接続プール)を宣言するのか理解できません。うまくいけば、context.xmlの使用に反対する次の議論で私の事実をまっすぐに理解できます
私の知る限り、/ META-INF / context.xmlで宣言されたリソースはコンテキスト内でのみ使用可能であるため、リソースを共有するためにそうする理由はありません。
この方法で接続プールリソースを宣言すると、コンテナのクラスローダーへの依存関係が作成されるため、たとえば、データベースドライバを変更したい場合は、コンテキストだけでなく、コンテナを再起動する必要があります。
また、JNDIのようなコンテナに依存するため、スタンドアロンテストが難しくなります。
最後に、ビルド時のフープを飛び越えて、たとえばテストリソースと本番リソースの間でリソースを切り替える必要があります。
これらの問題はどれも克服できないものではありませんが、接続プールを作成してコンテキストスコープにフックする方がはるかに簡単なようです。
context.xmlファイルが正しい答えはどのような状況であるか知りたいですか?
memory-management - commons dbcp (およびその他の接続プール) は、開いているステートメントと結果セットをどのように管理しますか?
具体的には、接続をプールに戻すときに、dbcp (およびその他の接続プール) はステートメントと結果セットを閉じますか?
または、これらを自分で閉じる必要がありますか?
java - DB接続プールを縮小するには?
Tomcat コンテナで Apache DBCP と JNDI を使用して、mysql データベースへの接続をプールしています。すべて正常に動作しますが、pconnection がプールされると解放されないという問題が発生します。そのため、接続の負荷が急上昇した後は、永遠に眠ってしまいます。context.xml パラメータを使用してプールを縮小する方法はありますか? ここに私の構成があります:
spring - DBCP 接続検証の問題
データベース接続でタイムアウトが発生していたので、主にDBCPを使用することにしました。理論的には、「検証クエリ」を定義すると、DBCP はデフォルトで、接続を使用する前にそのクエリを実行するため、接続が正常であることが常にわかります。
2週間前にセットアップしましたが、うまくいったようです。ただし、昨夜、接続でタイムアウト例外が発生しました。
私の開発マシンでは、コードは MySQL の再起動後も問題なく存続するため、DBCPが何かを行っていると思います。
これを調査するにはどうすればよいですか?この目的で DBCP を使用しますか?
(質問を読みやすくするために、50行程度の詳細を削除しました。重要な情報が欠落している場合はお知らせください)。
編集:始める前にこの質問を読むべきだったと思います...
java - Tomcatでプールせずにデータソースを作成する方法
JNDIコンテキストを使用して、Tomcatのcontext.xmlファイルにJDBCドライバーのデータソースを次のように作成します。
デフォルトでは、TomcatはDBCPデータソースファクトリと作成されたプーリングデータソースを使用します。私たちが使用する特定のデータベースとドライバーは、すでに下位レベルでのプーリングをサポートしており、余分なプーリングは実際にパフォーマンスを低下させます。このようなJNDIリソースを使用して(プールせずに)基本的なデータソースを作成して、最小限の構成変更で異なるデータベースを切り替えることができるようにする方法はありますか?
独自のデータソースファクトリを作成することも、他のドライバのファクトリを使用してこれを実現することもできますが、より簡単なソリューションを探しています。