2012-05-11 22 views
0

私はspring/hibernateアプリケーションを使用しており、c3p0接続プーリングを構成しています。 c3p0接続プーリングが有効になっています。ログを確認しました。c3p0接続プーリングのプロパティが設定されていませんか?

10 May 2012 14:55:56 INFO AbstractPoolBackedDataSource:462 - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 

は、しかし、問題は、プログラムで私が設定されたデータソースを取得し、そのプロパティが、これまで私は設定ファイルで設定されたプロパティ、それらが設定されていないを確認しようとしています、です。以下の設定とデバッグされた値を確認してください。

<prop key="hibernate.connection.pool.size">20</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.format_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">true</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> 
       <prop key="hibernate.c3p0.min_size">5</prop> 
       <prop key="hibernate.c3p0.max_size">20</prop> 
       <prop key="hibernate.c3p0.timeout">300</prop> 
       <prop key="hibernate.c3p0.max_statements">50</prop> 
       <prop key="hibernate.c3p0.idle_test_period">3000</prop> 
       <prop key="hibernate.jdbc.batch_size">50</prop> 
       <prop key="hibernate.c3p0.preferredTestQuery">SELECT GETDATE()</prop> 
       <prop key="hibernate.c3p0.testConnectionOnCheckout">true</prop> 

デバッグ値:

enter image description here

私は以下のようにデータソースを取得しています。

WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); 
.......getBean("datasourceId"); 
.................. 

私は優先テストクエリを設定しました。イメージ内ではnullです。

ここには何もありません。ありがとう!

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="pooledConn"/> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.dialect" >${HIBERNATE.DIALECT}</prop> 
     <!-- <prop key="hibernate.show_sql">${HIBERNATE.SHOW_SQL}</prop> --> 
      <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">${HIBERNATE.hBM2DDL.AUTO}</prop> 
     </props> 
    </property> 

をたどり、それは私のために絶対的に完璧な作品として

+0

nexstedDataSourceにプロパティが設定されているかどうかを確認できますか? – rascio

+0

私はそこにも存在しないことを確認しました。 – user1016403

答えて

0

は私が

0

に試してみてください、あなたがより多くの助けのためにあなたの設定を貼り付けてください可能性があり、それを使用します設定ファイルに以下を追加してください:

<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> 
0

私は同じ問題を抱えており、解決策を理解するのに時間がかかりました。

私はHibernate 4.0.1とmysql 5.1(春のフレームワークなし)を使用していますが、私はこの問題に直面していました。まず、c3p0 jarsが正しく設定されていることを確認してください。

私はhibernate.cfg.xmlの

<property name="hibernate.c3p0.validate">true</property> 
<property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property> 
<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.max_size">20</property> 
<property name="hibernate.c3p0.max_statements">50</property> 
<property name="hibernate.c3p0.preferredTestQuery">SELECT 1;</property> 
<property name="hibernate.c3p0.testConnectionOnCheckout">true</property> 
<property name="hibernate.c3p0.idle_test_period">10</property> 
<property name="hibernate.c3p0.acquireRetryAttempts">5</property> 
<property name="hibernate.c3p0.acquireRetryDelay">200</property> 
<property name="hibernate.c3p0.timeout">40</property> 

でこれらのプロパティを使用ししかし、それはC3P0はまだあなたがすることができ、デフォルトのプロパティではない私はhibernate.cfg.xmlで設定されたプロパティを取っていた役に立たない「原因のですそれをログでチェックしてください。だから、私は正しいソリューションのために多くのウェブサイトを検索し、ついにこれを思いつきました。 cfg.xmlのC3p0プロパティを削除し、(cfg.xmlとともに)ルートパスにc3p0-config.xmlを作成し、次のようにプロパティを設定します。

<c3p0-config> 
<default-config> 
<property name="automaticTestTable">con_test</property> 
<property name="checkoutTimeout">40</property> 
<property name="idleConnectionTestPeriod">10</property> 
<property name="initialPoolSize">10</property> 
<property name="maxPoolSize">20</property> 
<property name="minPoolSize">5</property> 
<property name="maxStatements">50</property> 
<property name="preferredTestQuery">SELECT 1;</property> 
<property name="acquireRetryAttempts">5</property> 
<property name="acquireRetryDelay">200</property> 
<property name="maxIdleTime">30</property> 
</default-config> 
</c3p0-config> 

しかし、あなたが実行した場合、ORMは、JDBC接続が、我々はhibernate.cfg.xmlでこれらのプロパティを追加する必要はありません原因C3P0接続プール」を取るには、

<property name="hibernate.c3p0.validate">true</property> 

<property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property> 

今すべてが正常に(少なくともそれに動作します私のためにうまくいった)問題が解決されました。

参考として以下を確認してください。

http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing

https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool

私は、これはあなたの問題を解決したいと考えています。

関連する問題