毎日のデータベースアクセスに失敗しました.
7156 ワード
一、
N多試験を経て、やっと自分でこの問題を解決しました.
ネット上ではC 3 P 0のspringにおける配置については、ほとんど完全に正確ではない(少なくとも私はまだ発見していない).c 3 p 0の文書を調べて、またN回試しました.以下のような構成が正しいということが分かりました.
二、
役に立つのは、datasourceの中のこの文です.
もっと不安なら、
三、
解決の方法は3つあります.
waitを増やすタイムアウトの時間.
Connection poolsでのconnectionのlifetimeを減らす.
Connection poolsにおけるconnectionの有効性をテストします.
もちろん、上記3つの方法を併用しながら、DBCPとC 3 P 0についてそれぞれ説明します.timeoutはデフォルトの8時間です.
DBCPには以下の設定情報が追加されます.
N多試験を経て、やっと自分でこの問題を解決しました.
ネット上ではC 3 P 0のspringにおける配置については、ほとんど完全に正確ではない(少なくとも私はまだ発見していない).c 3 p 0の文書を調べて、またN回試しました.以下のような構成が正しいということが分かりました.
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass"><value>${jdbc.driverClassName}</value></property>
<property name="jdbcUrl"><value>${jdbc.url}</value></property>
<property name="user"><value>${jdbc.username}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
<property name="minPoolSize"><value>1</value></property>
<property name="maxPoolSize"><value>20</value></property>
<property name="maxIdleTime"><value>1800</value></property>
<property name="acquireIncrement"><value>2</value></property>
<property name="maxStatements"><value>0</value></property>
<property name="initialPoolSize"><value>2</value></property>
<property name="idleConnectionTestPeriod"><value>1800</value></property>
<property name="acquireRetryAttempts"><value>30</value></property>
<property name="breakAfterAcquireFailure"><value>true</value></property>
<property name="testConnectionOnCheckout"><value>false</value></property>
<!--
<property name="properties">
<props>
<prop key="c3p0.minPoolSize">1</prop>
<prop key="c3p0.maxPoolSize">10</prop>
<prop key="c3p0.maxIdleTime">1800</prop>
<prop key="c3p0.acquireIncrement">2</prop>
<prop key="c3p0.maxStatements">0</prop>
<prop key="c3p0.initialPoolSize">2</prop>
<prop key="c3p0.idleConnectionTestPeriod">1800</prop>
<prop key="c3p0.acquireRetryAttempts">30</prop>
<prop key="c3p0.breakAfterAcquireFailure">true</prop>
<prop key="c3p0.testConnectionOnCheckout">true</prop>
<prop key="user">root</prop>
<prop key="password">999999</prop>
</props>
</property>
-->
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/licaionline/domain/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<!--
<prop key="hibernate.useUnicode"></prop>
<prop key="hibernate.characterEncoding"></prop>
<prop key="hibernate.default-lazy-init"></prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
-->
<!--
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<prop key="hibernate.c3p0.idle_test_period">1800</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.max_size">30</prop>
<prop key="hibernate.c3p0.min_size">2</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
-->
</props>
</property>
注意:注釈したものは全部間違っています.ネットで流行っているのは、基本的に注釈を落としたのと同じです.間違えました.異常はありません.正常に使えます.しかし、作った配置が機能しません.二、
役に立つのは、datasourceの中のこの文です.
<property name="maxIdleTime"><value>1800</value></property>
1800秒ごとにスキャンして、空いているリンクを確認するように設定しています.したがって、ユーザーは基本的に空きのないリンクを得ることができます.もっと不安なら、
<property name="testConnectionOnCheckout"><value>false</value></property>
ここはtrueに設定します.接続する前に毎回測定します.しかし、これは効率に影響します.三、
解決の方法は3つあります.
waitを増やすタイムアウトの時間.
Connection poolsでのconnectionのlifetimeを減らす.
Connection poolsにおけるconnectionの有効性をテストします.
もちろん、上記3つの方法を併用しながら、DBCPとC 3 P 0についてそれぞれ説明します.timeoutはデフォルトの8時間です.
DBCPには以下の設定情報が追加されます.
//set to 'SELECT 1'
validati
//set to 'true'
testWhileIdle = "true"
//some positive integer
timeBetweenEvictionRunsMillis = 3600000
//set to something smaller than 'wait_timeout'
minEvictableIdleTimeMillis = 18000000
//if you don't mind a hit for every getConnection(), set to "true"
C 3 P 0は、 の を します.//set to 'SELECT 1'
preferredTestQuery = 'SELECT 1'
//set to something much less than wait_timeout, prevents connections from going stale
idleConnectionTestPeriod = 18000
//set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out
maxIdleTime = 25000
//if you can take the performance 'hit', set to "true"
testConnectionOnCheckout = true
より くの は、C 3 P 0ドキュメント、Connector/Jドキュメント、およびDBCPのドキュメントを ることができます.