篇の良い文を回転します:c 3 p 0詳しい配置と1つの問題
c 3 p 0詳細構成
公式文書:
http://www.mchange.com/projects/c3p0/index.html
http://www.wujianrong.com/archives/2007/08/c3p0.html
MYSQL 8時間の問題を解決します。
一番近い項目はHibernateでC 3 P 0の接続池を使っています。データベースはMysqlです。開発テストは問題ありません。運転中は長い間の空き時間に異常が発生します。
Mysqlサーバのデフォルトの「wait uutimeout」は8時間、つまりconnectionの空き時間が8時間を超えると、Mysqlは自動的にこのコンサートを切断します。これは問題の所在です。C 3 P 0 poolsでのconnectionsの空き時間が8時間を超えると、Mysqlが切断されます。C 3 P 0はこのconnectionが失効したことを知らないです。もしCientがconnectionを要求したら、C 3 P 0はこの失効したConnectionをCientに提供し、上面の異常を引き起こします。
解決の方法は3つあります。
1.wait_を増やすタイムアウトの時間
2.Connection poolsでのconnectionのlifetimeを減らす。
3.Connection poolsにおけるconnectionの有効性をテストします。
もちろん、上記3つの方法を併用しながら、DBCPとC 3 P 0についてそれぞれ説明します。timeoutはデフォルトの8時間です。
DBCPには以下の設定情報が追加されます。
//set to'SELECT 1'
validationQuery=「SELECT 1」
//set to'true'
testWhileIdle=「true」
//some positive integer
timeBetweenEviicationRuns Millis=3600000000
//set to something smaler than'wait_timeout
minevictable IdleTimeMillis=18000000000
//if you don't mind a hit for every get Connection()、set to「true」
test OnBorrow=「true」
C 3 P 0は、以下の構成情報を追加します。
//connnectionを取得する時、有効かどうかをテストします。
testConnection OnCheckin=true
//自動試験のテーブル名
atomatic TestTable=C 3 P 0 TestTable
//set to something much less than wait_timeout,prevents connections from going stale
idleConnection TestPeriod=18000
//set to something sless than wait_timeout,preventing'stale'connections from being handout
maxIdleTime=25000
//if you can take the performance'hit'set to"true"
testConnection OnCheckout=true
より多くの設定情報は、C 3 P 0ドキュメント、Connector/Jドキュメント、DBCPのドキュメントを見ることができます。
回転:
http://www.iteye.com/article/38506
自分の設定:
jdbc.driverClass=comp.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test
jdbc.user=root
jdbc.password=12345
jdbc.miniPoolSize=1
jdbc.maxPoolSize=20
jdbc.initial PoolSize=1
jdbc.maxIdle Time=25000
jdbc.acquire Increment=1
jdbc.acquire RetryAttempts=30
jdbc.acquireRetryDelay=1000
jdbc.testConnection OnCheckin=true
jdbc.atomatic TestTable=c 3 p 0 TestTable
jdbc.idleConnection TestPeriod=18000
jdbc.checkout Timeout=3000
<bean id=「dataSource」class=「comp.mchange.v 2.c 3 p 0.compbolodData Source」destroy-method=「close」
公式文書:
http://www.mchange.com/projects/c3p0/index.html
<c3p0-config>
<default-config>
<!-- c3p0 。Default: 3 -->
<property name="acquireIncrement">3</property>
<!-- 。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!-- , 。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!-- 。Default: false -->
<property name="autoCommitOnClose">false</property>
<!--c3p0 Test , 。
preferredTestQuery 。 Test , c3p0
。Default: null-->
<property name="automaticTestTable">Test</property>
<!-- 。
, getConnection() 。 true,
。Default: false-->
<property name="breakAfterAcquireFailure">false</property>
<!-- getConnection() ,
SQLException, 0 。 。Default: 0 -->
<property name="checkoutTimeout">100</property>
<!-- ConnectionTester QueryConnectionTester 。 。
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
<property name="connectionTesterClassName"></property>
<!-- c3p0 libraries , ( ) , null
Default: null-->
<property name="factoryClassLocation">null</property>
<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
( ) -->
<property name="forceIgnoreUnresolvedTransactions">false</property>
<!-- 60 。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>
<!-- , minPoolSize maxPoolSize 。Default: 3 -->
<property name="initialPoolSize">3</property>
<!-- ,60 。 0 。Default: 0 -->
<property name="maxIdleTime">60</property>
<!-- 。Default: 15 -->
<property name="maxPoolSize">15</property>
<!--JDBC , PreparedStatements 。 statements
connection 。 。
maxStatements maxStatementsPerConnection 0, 。Default: 0-->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection statements 。Default: 0 -->
<property name="maxStatementsPerConnection"></property>
<!--c3p0 , JDBC 。
。Default: 3-->
<property name="numHelperThreads">3</property>
<!-- getConnection() root 。 c3p0
。Default: null-->
<property name="overrideDefaultUser">root</property>
<!-- overrideDefaultUser 。Default: null-->
<property name="overrideDefaultPassword">password</property>
<!-- 。Default: null-->
<property name="password"></property>
<!-- 。 。 :
。Default: null-->
<property name="preferredTestQuery">select id from test where id=1</property>
<!-- 300 。Default: 300 -->
<property name="propertyCycle">300</property>
<!-- 。 true connection
。 idleConnectionTestPeriod automaticTestTable
。Default: false -->
<property name="testConnectionOnCheckout">false</property>
<!-- true 。Default: false -->
<property name="testConnectionOnCheckin">true</property>
<!-- 。Default: null-->
<property name="user">root</property>
<!-- c3p0 JDBC 。
。
, 。
, 。Default: false-->
<property name="usesTraditionalReflectiveProxies">false</property>
<property name="automaticTestTable">con_test</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">25</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">0</property>
<user-overrides user="swaldman">
</user-overrides>
</default-config>
<named-config name="dumbTestConfig">
<property name="maxStatements">200</property>
<user-overrides user="poop">
<property name="maxStatements">300</property>
</user-overrides>
</named-config>
</c3p0-config>
回転:http://www.wujianrong.com/archives/2007/08/c3p0.html
MYSQL 8時間の問題を解決します。
一番近い項目はHibernateでC 3 P 0の接続池を使っています。データベースはMysqlです。開発テストは問題ありません。運転中は長い間の空き時間に異常が発生します。
org.hibernate.exception.JDBCConnectionException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
.......
Caused by: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:
** BEGIN NESTED EXCEPTION **
com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Broken pipe
STACKTRACE:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
......
** END NESTED EXCEPTION **
Mysqlの文書とConnector/Jの文書とオンライン説明を見たら、この異常な原因は:Mysqlサーバのデフォルトの「wait uutimeout」は8時間、つまりconnectionの空き時間が8時間を超えると、Mysqlは自動的にこのコンサートを切断します。これは問題の所在です。C 3 P 0 poolsでのconnectionsの空き時間が8時間を超えると、Mysqlが切断されます。C 3 P 0はこのconnectionが失効したことを知らないです。もしCientがconnectionを要求したら、C 3 P 0はこの失効したConnectionをCientに提供し、上面の異常を引き起こします。
解決の方法は3つあります。
1.wait_を増やすタイムアウトの時間
2.Connection poolsでのconnectionのlifetimeを減らす。
3.Connection poolsにおけるconnectionの有効性をテストします。
もちろん、上記3つの方法を併用しながら、DBCPとC 3 P 0についてそれぞれ説明します。timeoutはデフォルトの8時間です。
DBCPには以下の設定情報が追加されます。
//set to'SELECT 1'
validationQuery=「SELECT 1」
//set to'true'
testWhileIdle=「true」
//some positive integer
timeBetweenEviicationRuns Millis=3600000000
//set to something smaler than'wait_timeout
minevictable IdleTimeMillis=18000000000
//if you don't mind a hit for every get Connection()、set to「true」
test OnBorrow=「true」
C 3 P 0は、以下の構成情報を追加します。
//connnectionを取得する時、有効かどうかをテストします。
testConnection OnCheckin=true
//自動試験のテーブル名
atomatic TestTable=C 3 P 0 TestTable
//set to something much less than wait_timeout,prevents connections from going stale
idleConnection TestPeriod=18000
//set to something sless than wait_timeout,preventing'stale'connections from being handout
maxIdleTime=25000
//if you can take the performance'hit'set to"true"
testConnection OnCheckout=true
より多くの設定情報は、C 3 P 0ドキュメント、Connector/Jドキュメント、DBCPのドキュメントを見ることができます。
回転:
http://www.iteye.com/article/38506
自分の設定:
jdbc.driverClass=comp.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test
jdbc.user=root
jdbc.password=12345
jdbc.miniPoolSize=1
jdbc.maxPoolSize=20
jdbc.initial PoolSize=1
jdbc.maxIdle Time=25000
jdbc.acquire Increment=1
jdbc.acquire RetryAttempts=30
jdbc.acquireRetryDelay=1000
jdbc.testConnection OnCheckin=true
jdbc.atomatic TestTable=c 3 p 0 TestTable
jdbc.idleConnection TestPeriod=18000
jdbc.checkout Timeout=3000
<bean id=「dataSource」class=「comp.mchange.v 2.c 3 p 0.compbolodData Source」destroy-method=「close」