私はc3p0の設定に問題があります。私は先週質問を投稿しました - C3P0 Configurations! Where and How?、回答はありませんでした。 何か助けていただければ幸いです。c3p0のベストコンフィグ
答えて
JPAがコンテナ環境を使用してDataSourceを取得するように設定するのが最適です。
これにより、コンテナはJPAプロジェクトに直接構成するのではなく、接続プーリングを提供できます。
作業するコンテナ環境を指定していません。ほとんどの場合、Java SEデスクトップアプリケーションやサーバーアプリケーションなどのスタンドアロンアプリケーションでは、常にc3p0を使用します。私はSpringフレームワークでも使用します。
Servlet(Tomcat/Jetty)やApplication Server(GlashfishやJBoss ASなど)などのコンテナを使用している場合は、通常はc3p0ではなく同等の機能を備えたDataSource接続プーラーの実装がすでに提供されています。
JPAプロジェクト内で接続プーラーを構成しようとしたことはありません。これは、実行する必要のあるすべての環境で構成を編集するためです。これは頭痛で、JPAの一部には、ブートストラップ中に
あなたの答えをありがとう。私はhibernate3.0、c0p3-0.9.1とTomcatを使っています。接続プールを構成する戦略のサンプルがありますか?あなたの過去の活動がこれを助けてくれたら、MySQLがアイドル状態の接続を8時間後に壊すのを避けることは非常に重要です。それは私に歓迎されます。 –
MySQLが8時間後にアイドル状態の接続を切断しても、c3p0は、使用前に常に接続をテストし、アイドル時にテストを続けるように設定できます。その情報のStackOverflowを検索しましたか? http://stackoverflow.com/questions/10526313/zombie-connections-to-mysql-using-c3p0-with-tomcat(他にも多くの参考文献がありますが、C3P0を使用しないようにTomcatに指示してから、 JNDIルックアップを使用するようにJPAプロジェクトを変更してください)。 –
私はテスト接続が助けることができ、私はc3p0構成を持っていることを知っていますが、私はこれらの構成が真実であり働いているかどうかはわかりません。私の最後の質問を見てください。stackoverflow.com/questions/12446266/c3p0-configurations-where-and-how –
これは、リソースを最小限に抑えるために使用している設定です。もちろん、
リファレンス ...それは必要なリソースを使用するようにアプリケーションを調整することをお勧めします:http://www.mchange.com/projects/c3p0/index.html
testConnectionOnCheckin
は、それがプールに戻され、接続を検証します。testConnectionOnCheckOut
は、使用する前にアクティブな接続を確実にしますが、実行するには高価になります。idleConnectionTestPeriod
は、テストする前に接続がアイドル状態を維持する時間の上限を設定します。 preferredTestQueryを使用しない場合、デフォルトはDatabaseMetaData.getTables()
です。これはデータベースに依存しませんが、比較的高価な呼び出しでも、比較的小さなデータベースでは問題ありません。パフォーマンスに関する不正使用の場合、データベースに固有のクエリ(preferredTestQuery="SELECT 1"
)maxIdleTimeExcessConnections
は、活動が急増した後に接続カウントをminPoolSize
に戻します。
以下の設定では、poolsizeを3〜20に設定します。アイドル状態の接続は、5分ごとに再試行され、アクティブに保たれます。 idleConnectionTestPeriod
のため、接続の最小数が有効になります。 4分のマークで3つ以上の接続がある場合、リソースを最小限に戻す接続が切断されます。
maxIdleTimeExcessConnections
の使用とidleConnectionTestPeriod
は、これは素晴らしい、非常に便利な疑問だったmaxIdleTime
<Context docBase="myapp" path="/myapp" reloadable="true">
<Resource description="My DB Datasource" name="jdbc/mydb"
auth="Container" factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
user="myuser" password="******"
minPoolSize="3"
maxPoolSize="20"
acquireIncrement="1"
driverClass="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost:3306/mydb"
testConnectionOnCheckin="true"
idleConnectionTestPeriod="300"
maxIdleTimeExcessConnections="240"
/>
</Context>
あなたの答え、Domenicに感謝します。私はあなたが指摘しているリファレンスを赤くしていましたが、私はc3p0のプロパティの動作を知っていますが、私のプロジェクトでは、これらのプロパティーは、私の他のポストでは完全な状態ではないので、他のプロパティを必要とするか、別の設定ファイルに設定する必要があります。 –
@Domenic:同じ問題が発生しました。新しい接続を作成できません。ここに私のすべての詳細があります。あなたが私のc3p0の問題を見つけ出すような気がします。 http://stackoverflow.com/questions/38994849/unable-to-get-jdbc-connection-even-pool-shows-only-few-connections-are-used –
の必要性を否定します。それ以上の答えがあれば、それは私に多くの努力を救いました。何もない、司会者ありがとう! –
私は同意します。これは良い質問でした。いくつかの司会者は素早く良い質問を破棄しました。 –