問題タブ [c3p0]
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 - C3P0はスレッドセーフですか?
MySQLデータベースでC3P0を使用していくつかの単純な読み取り(SELECT)操作を実行しようとすると、割り込み例外(java.lang.InterruptedException)が発生します。並列スレッドの数を100を超えて増やすと、例外が発生します(5、10、20、60、および100で試しました)。私が実行するステートメントは、次のように単純です。
私の接続は、次のプロパティを使用して構成されたComboPooledDataSourceからプールされます(C3P0マニュアルも参照)。
テストを実行するマシン上のMySQLサーバーは、1024接続を受け入れるように構成されており、実行する単体テストは正常に実行されます(データは期待どおりにデータベースから取得されます)。ただし、C3P0ログファイルに次の警告があります。
その警告の理由を知りたいのですが、次に、ソフトウェアの堅牢性と安定性に与える可能性のある影響について知りたいと思います。使用後、結果セット、SQLステートメント、および接続を閉じることに注意してください。最後に、テストが終了したら、メソッドを呼び出してプールを閉じますComboPooledDataSource#close()
。もっと奇妙なことは(そして同期の問題を明らかにするように思われる)、私が以下を使用してプールに十分な時間を与えるならば...
ログに警告は表示されません!これはC3P0のスレッドセーフの問題を引き起こすと思いますか、それとも私は間違った方法で何かをしていますか?
アップデート1:
すでに述べたものとは別に、を削除するThread.sleep(10000)
と、次の情報がMySQLログファイルに記録されます。
もう少し光を当てるかもしれません...
アップデート2:
これが私のMySQLサーバー構成です。サーバーで許可される最大接続数は1024に設定されています(前述のとおり)。これは、私がやろうとしていることには十分です。
疑問を曖昧にするために、接続の最大数が次のように適切に設定されていることを確認しました。
sql - SQLサーバーからデータを取得できません
SQLServerのデータベースからデータを取得できません。
私はプールとしてc3p0を使用します、これはc3p0.propertiesです:
SQLサーバーで、testという名前の新しいユーザーを作成しました。デフォルトのデータベースはTIMDBで、サーバーの役割はパブリックです。これはユーザーマッピングです。
しかし、アプリケーションを起動すると、何も取得できません。
log4jによって作成されたログから、データの取得に使用されるSQLを取得できますが、SQLをSQL Management Stutioにコピーして新しいクエリを作成すると、一部のデータを取得できます。
なんでだろう?
hibernate - hibernate.cfg.xmlを使用するときにc3p0.propertiesファイルを保持する理由はありますか?
私たちのプロジェクトでは、接続プールとしてc3p0を使用したHibernate(3.3.2)を使用しています。しばらくの間、c3p0.propertiesファイルにいくつかのc3p0プロパティがあり、hibernate.cfg.xmlに他のプロパティがあったようです。最後の2つのc3p0プロパティをhibernate.cfg.xmlに移動し、それらが尊重されていることを確認しました。
c3p0プロパティをhibernate.cfg.xmlで指定できる場合、c3p0プロパティファイルを保持する理由はありますか?そこに設定できないプロパティがある、または私が考えていない別の理由など。2つの場所でc3p0プロパティを指定すると、混乱が生じるだけのようです。
hibernate.cfg.xmlで一部のプロパティを渡すことができないという以前の信念があったと思いますが、これは単なる神話だと思います。それがこの質問の主な理由です。
java - SpringJDBC接続プールのベストプラクティス
かなり基本的な構成の基本的なSpringJDBCアプリケーションがあります。
接続プールを紹介したいと思います。SOでいくつかのスレッドを読んだ後、どのプーリングライブラリを使用するかについて少し混乱しています。
SOでより多くのクレジットを持っているように見えるライブラリは、C3P0とDBCPです。Oracleを使用しているので、ドライバーが提供するプールされたデータソースを使用することもできます。
より多くのライブラリが利用可能であることを理解しています。たとえば、新しいApacheTomcat7プーリングライブラリです。
本当に避けるべきライブラリはありますか?
特定のライブラリで使用する必要のある推奨構成はありますか?
共有したい「戦争物語」はありますか?
hibernate - 休止状態のフォロワーと苦痛:コレクションを2つのオープンセッションに関連付ける違法な試み
私はゲームプロジェクトに取り組んでいます。10分ごとにプレーヤーをランク付けする必要があります。これは簡単です。ストックゲーム。プレーヤーのランクを更新するために、私は10分ごとにスレッドを実行し、スレッドはすべてのプレーヤーオブジェクト(プレーヤーという名前)をフェッチし、そのスコアを計算してから次のプレーヤーに移動します。ちなみに、プレーヤーのスコアを独自のオブジェクトに保存しています。 (プレーヤー)。
しかし、更新がトランザクションブロック内にある場合、MySqlはデータの正確性を保証するため、それが原因ではないと思います。それでは、なぜ休止状態でこの機能を制限する必要があるのでしょうか。
これが並行性の問題であり、私が言ったシナリオと関係があるかどうかはわかりません。もう1つは、c3p0を使用していないことです。Hibernateと一緒に、これが関連しているかどうかはわかりません。
前方のthnx、
java - c3p0 getConnection は、acquireRetryAttempts に達すると、例外を返したりスローしたりしません
接続プールに c3p0 を使用すると、c3p0 を呼び出すスレッドは、接続プールが再試行を使い果たした後に終了するか、未定義の状態のままになっているように見えます。
接続プールは次のように定義されます。
クライアント コードは getConnection を呼び出します。これは、c3p0 が接続の再試行をスピンしている間、一時的にブロックされます。奇妙なことに、この呼び出しから実際には戻らないようです。ドキュメントから、例外がスローされることを期待していました。
とても奇妙です。絶対に返さず、例外もスローしません。5 秒ごとに実行される Executors.newSingleThreadScheduledExecutor から getConnection を呼び出しているクライアント コード。getConnection への呼び出しが蒸発したように見えると、スケジュールされたエグゼキュータ スレッドもまったく実行を停止したように見えます。
この場合、ここで何が起こっているのかを把握できるように、意図的にデータベースをオフのままにしています。何か案は?
更新: 奇妙なことに、スケジュールされたエグゼキューターを使用せず、代わりに自分のモニター スレッドで実行すると、#getConnection は期待どおりに動作します。
hibernate - DB接続が不足しています!
c3p0 を接続プールとして使用して、MySQL セットアップに接続する Spring/Hibernate を実行しています。奇妙な理由で、システムに負荷がかかっているときに接続が不足します(もちろん)。
新しいレベルのトラフィック (100 人以上の同時ユーザー) に到達するまで、サイトはかなり安定していました。その時点で、DB はメルトダウンします (CPU をペグします)。私の最初のアクションは、広範なキャッシュやクエリの最適化などを通じてパフォーマンスを向上させることでした。
現在、断続的に接続が不足しています。負荷にあまり依存していないようです。時間通りに漏れていると思いますが、私の人生では、それがどこから来ているのかわかりません.
これが私の構成です:
接続を閉じる必要がある OpenSessionInViewInterceptor を実行しています。
また、@Transactional のスプリング アノテーションも使用しています。これは、サービスを Web フロント以外のコードで再利用するためです。
ここには実際には 2 つのオプションしかありません。完了時に接続を解放するわけではありません。または、彼女のズボンに入ろうとしているかのように、db でチャットをぶらぶらしています。誰かが何かアイデアを持っているなら、私は感謝しますthx
フォローアップ:最終的に、OpenSessionInViewInterceptor を使用したために接続がリークしていたことが判明しました。私は春のセキュリティをフィルターとして実行していたので、DBに接続してそれらを閉じません。修正は、OpenSessionInViewInterceptor を OpenSessionInViewFilter に移動することでした。
spring - Tomcat Spring ベースのアプリで c3p0 接続プーリングを使用する
Tomcat 6 で Spring ベースの Web アプリケーションを実行しています。ここで、Tomcat のデフォルト DBCP の代わりに c3p0 接続プールを使用したいと考えています。したがって、c3p0 ヘルプドキュメントから、データ ソースを次のcontext.xml
ように定義しました。
さて、ドキュメントによると、次のものを に含める必要がありますweb.xml
。
には次のものもありますapplicationContext.xml
。
Tomcatを起動すると、
javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません
c3p0 を使用せず、tomcat6 でデフォルトの接続プールを使用しても問題なく動作します。
どんな助けでも大歓迎です。
java - C3P0 接続の問題
データベース操作に休止状態と cp30 を使用していて、エラーが発生しています:
ここに私のjdbcプロパティがあります:
および cp30:
Mysql は現在、私に接続を提供していません。mysql の接続使用状況を表示する方法はありますか? そして、これらの悪い接続をフラッシュできますか? 最も重要な質問は、この接続プール エラーを回避するにはどうすればよいかということです。
前もって感謝します。
java - Springを使用したHibernateでの組み込みc3p0プーリングの構成
hibernateでc3p0プーリングを構成するには、次のようにhibernate.cfg.xmlに構成を記述できることを学びました。
ただし、Springを使用してHibernateを構成しました。以下を実行しようとすると、機能しませんでした。
Springを使用して構成できるスタンドアロンのc3p0プーリングの使用について読みましたが、Springを使用してHibernateに組み込みのc3p0プーリングを構成する方法はありますか?
私は初心者です。