問題タブ [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.
database - Hibernate c3p0 接続プールがアイドル接続をタイムアウトにしない
DB接続プーリングにc3p0を使用している永続層としてHibernateを使用して、MySQL 5データベースに接続するJavaサーバーがあります。
私はc3p0と休止状態のドキュメントに従ってみました:
本番サーバーで次のようなエラーが発生しています。
... 原因: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 接続が閉じられた後、操作は許可されません。根本的な例外/エラーのため、接続は暗黙的に閉じられました:
ネストされた例外の開始
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
メッセージ: サーバーから正常に受信された最後のパケットは 45000 秒前でした。サーバーに正常に送信された最後のパケットは 45000 秒前で、サーバーが構成した 'wait_timeout' の値よりも長くなっています。この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れにするかテストするか、クライアント タイムアウトのサーバー設定値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用することを検討する必要があります。
スタックトレース:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: サーバーから正常に受信された最後のパケットは 45000 秒前でした。サーバーに正常に送信された最後のパケットは 45000 秒前で、サーバーが構成した 'wait_timeout' の値よりも長くなっています。この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れにするかテストするか、クライアント タイムアウトのサーバー設定値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用することを検討する必要があります。
次のように c3p0 接続プールのプロパティを設定しました。
デフォルトの MySQL の wait_timetoutは 28800 秒 (8 時間) に設定されています。報告されたエラーは、45000 秒 (約 12.5 時間) を超えていることを示しています。c3p0 構成では、5000 秒後に使用されていないアイドル状態の接続を「タイムアウト」し、300 秒ごとにチェックすると記載されていますが、アイドル状態の接続が 5299 秒より長く存続することはありません。
開発者の MySQL (Windows では my.ini、Unix では my.cnf) を wait_timeout=60 に設定し、c3p0 のアイドル タイムアウト値を 60 秒未満に下げることで、ローカルでテストしました。これにより、アイドル接続が適切にタイムアウトし、新しい接続が作成されます。また、DB 接続をリークして接続を保持していないことも確認しましたが、そうではないようです。
これは、c3p0 が接続を適切に処理していることを確認するために開発者環境でテストするために使用している c3p0.properties ファイルです。
hibernate.properties (MySQL の wait_timeout=60 でテスト)
c3p0.properties
java - 接続プーリングに必要な接続数を決定するにはどうすればよいですか?
アプリケーションで休止状態 3.2.2 を使用しています。接続プーリングには、c3p0 0.9.1 を使用しています。Generic DAO Pattern と Open Session in View パターンを使用してデータベース操作を行っています。
既存のウェブサイトの新しいウェブサイトに取り組んでいます。現在、訪問数は既存のアプリケーションで 50 万ページに達しています。c3p0 構成と混同しています。どのベンチマークで、開く接続の数を決定します。最大接続、最小接続、アイドル時間、タイムアウトなど....
java - c3p0/hibernate のクエリ タイムアウトしきい値を設定する方法
Hibernate 3、c3p0、および spring 2.5.6 を使用するアプリケーションがあります。postgres データベースと通信するように構成されたデータソースがあります。アプリケーション サーバーとデータベースの間にファイアウォールが導入されるまで、すべてがうまく機能していました。データベースと通信しようとしているときに断続的に java.net.SocketTimeoutException: Read Timed Out エラーが発生します。
ファイアウォールのオーバーヘッドが原因で、データベースからの応答が遅れていると考えられます。クエリがタイムアウトと見なされるまでの待機時間のしきい値を増やすことで、これを確認したいと考えています (それが可能であれば)。ここにスタックトレースのスニペットがあります
mysql - Spring、hibernate、C3P0 の設定で com.mysql.jdbc.exceptions.jdbc4.CommunicationsException を再現
プロダクションコードからこのエラーが発生しました:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: サーバーから正常に受信された最後のパケットは 36940 秒前でした。サーバーに正常に送信された最後のパケットは 36940 秒前で、サーバーが構成した 'wait_timeout' の値よりも長くなっています。この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れにするかテストするか、クライアント タイムアウトのサーバー設定値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用することを検討する必要があります。
そして今、問題をローカルで再現して修正しようとしています。次のように春のコンテキストをセットアップします。
次に、mysqlのwait_timeoutを10秒に設定し、テストを実行します。これは、基本的に接続を開き、クエリを実行して閉じ、プールに戻り、スレッドを15秒間スリープさせてから、再度接続を開きます、もう一度クエリを実行すると、壊れます。ただし、同様のエラーのみが発生しました。
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信リンク障害
サーバーに送信された最後のパケットは 16 ミリ秒前です。
では、これら 2 つのエラーは同じものなのだろうか、それとも異なるものなのだろうか? 私はいくつかの調査を行いましたが、両方のエラーが同じ解決策に至ったようです:プロパティ「testConnectionOnCheckout = true」を使用しています。ただし、c3p0 doc によると、これは非常にコストのかかるチェックです。「idleConnectionTestPeriod」の使用を推奨していますが、私はすでに 120 秒に設定しています。アイドル状態の接続を適切に検証できるようにするには、どの値を使用すればよいですか?
だから私は基本的に2つのことを尋ねています:
- 製品コードで発生したエラーを再現するにはどうすればよいですか?
- どうすれば修正できますか?
ありがとう!
log4j - ログバック-C3P0およびHSQLDB
LogBackでC3P0でHSQLDBを使用できるようにしようとしています。現在の環境を考えると、現時点ではこの構成に固執しています。Log4Jコードに多額の投資をしており、SLF4JLog4Jアダプターも使用する必要があります。単純なロギングプログラムを試してみると、ロガーの構成段階でスタックしています。これが私のlogback.xml
:
私のクラスパスは次のとおりです。
これが私のコードの抜粋です:
「開始」はコンソール出力に表示されますが、それ以外は表示されません。
どんな助けでもいただければ幸いです!
hibernate - データベースがダウンしているときにHibernateが例外をスローするのに10分かかります
Spring + hibernate 3+c3p0を実行しています。起動時に、データベースがダウンしている場合、約10分後に例外がスローされます。それまではプログラムはブロックされます...これはかなり一般的な問題であり、解決策が存在する場合は標準的な簡単な方法である必要があるため、Spring xml、Hibernate構成などは含めません。そうでない場合は、重要なコードと構成をトリミングして、ここに貼り付けることができます。誰かがそれについて何か知っていますか?前もって感謝します。
明確にするために:
私が本質的に必要としているのは、DriverManager.setLoginTimeout()関数の周りにc3p0または休止状態、さらにはスプリングにラッパーがあるかどうかを知ることです。または、この機能を提供する機能。ラッパーは、設定などを介して行うことができます。原因(ソケット、データベース、悪天候)に関係なく、X秒以内にデータソースに接続しなかった場合は例外を取得したいだけです。そして、このXを設定する場所を見つけたいと思います。さらに悪いことに、私が使用しているドライバーであるOracleドライバーは、setLoginTimeout()を実装していないため、直接使用できません。私はそれを解決する方法はないことに気づきましたが、手動で自分のタイマースレッドを生成します。誰でも上記の状況を確認できますか?どうもありがとう。
java - hibernatec3p0壊れたパイプ
あるソースから常にデータを抽出してデータベースに書き込むプログラムに、c3p0でhibernate3を使用しています。ここで問題となるのは、何らかの理由でデータベースが使用できなくなる可能性があることです(最も単純なケースでは、単にデータベースをシャットダウンします)。
データベースに何かが書き込まれようとしている場合でも、例外はありません。クエリは、データベースが再び使用可能になるまで、永遠に待機する必要があります。私が間違っていない場合、これは接続プールが私のためにできることの1つです。データベースに問題がある場合は、接続を再試行してください。最悪の場合、無限大です。
しかし、代わりに、壊れたパイプの例外が発生し、接続が拒否された後、例外が自分のコードに渡されることがありますが、これは発生しないはずです。
例外をキャッチした場合でも、どうすれば休止状態をクリーンに再初期化できますか?(これまでのところ、c3p0を使用せずに、セッションファクトリを再構築しただけですが、接続がリークする可能性がある場合でも驚かないでしょう(またはそうしても大丈夫ですか?))。
データベースはVirtuosoオープンソース版です。
私のhibernate.xml.cfgc3p0構成:
ところで:テストテーブルが作成され、大量のデバッグ出力が得られるので、実際に構成を読み取っているようです。
sql-server-2005 - SQL Server 2005 - ネストされたトランザクションをロールバックできません
ストアド プロシージャを実行すると、SQL Server 2005 から次のメッセージが表示されることがあります。
何か案は?
接続プーリング メカニズムが準備済みステートメントを閉じようとすると、次のようになります。
ストアド プロシージャには、不要と思われるネストされたトランザクション T1 が含まれています。それが問題でしょうか?
ありがとう
java - C3P0 を使用する複数の Hibernate インスタンス
私は奇妙な問題に直面しており、c3p0 に関連しているようです。互いにやり取りする同じ Java vm でアプリの 2 つのインスタンスを開始しています。いくつかの操作の後、「APPARENT DEADLOCK」メッセージがログに表示されます。
異なるセッション ファクトリ インスタンスを使用していますが、両方のアプリ インスタンスが同じ接続プールを使用しているように感じます。
C3P0 に何らかの「シングルトン マジック」が関与している可能性はありますか?