1

接続プールとしてc3p0を使用するWebアプリケーションがあります。ormツールとしてHibernateを使用します。最近、接続タイムアウトの例外が発生しています。これらの例外をデバッグするために、C3p0のログを有効にして、ログにいくつかの情報を取得しました。誰かがそれを完全に理解するのを手伝ってくれますか?

DEBUG 2012-08-05 14:43:52,590 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] com.mchange.v2.c3p0.stmt.GooGooStatementCache: checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 1; num keys: 2

上記から、接続プールの合計サイズが2であることがわかります。チェックアウトされた接続の数は0です。これは正しいですか?そして、上記のnum_connectionsとnumキーは何ですか?

ありがとう..

4

2 に答える 2

1

引用したログのビットに表示されているのは、接続プールではなく、ステートメントキャッシュのスナップショットです。メッセージがログに記録された時点で、1つの接続に属する2つのキャッシュされたPreparedStatementsがありました。どちらのステートメントもチェックアウト/使用されていません。

これがお役に立てば幸いです。

于 2012-08-05T23:54:05.800 に答える
0

例外は、C3P0設定が正しく定義されていないことが原因である可能性があります。正しいjarファイルにリンクしていることを確認してください。アプリケーションは、「c3p0*.jar」ではなく「hibernate-c3p0*.jar」にリンクされている必要があります。hibernate.connection.provider_classc3p0設定を有効にするには、hibernate.cfgファイルにプロパティが定義されている必要があります。以下はサンプル設定です

<property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property>

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>

ログエントリは、プールに4つの接続があり、4つの接続すべてがアプリケーションで使用できることを示しています。データベースに対してクエリを実行してすべてのアクティブな接続を一覧表示すると、プール接続が表示されます。たとえば、Mysqlでは、「show processlist;」を実行してこれらの接続を確認できます。

于 2012-08-06T12:03:26.257 に答える