[收藏]Spring 中 C3p0 connection pooling 的配置
Spring 的 DataSource bean 定義如下, 把可變的變量抽出放在db.properties file中, 方便修改 db.properties file只要放在當(dāng)前項(xiàng)目的classes路徑下,或放在Tomcat 的Shared/classes下, Spring 就可以找到<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>${jdbc.driver}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="acquireIncrement"><value>${hibernate.c3p0.acquire_increment}</value></property>
<property name="idleConnectionTestPeriod"><value>${hibernate.c3p0.idle_test_period}</value></property>
<property name="checkoutTimeout"><value>${hibernate.c3p0.timeout}</value></property>
<property name="maxPoolSize"><value>${hibernate.c3p0.max_size}</value></property>
<property name="minPoolSize"><value>${hibernate.c3p0.min_size}</value></property>
<property name="maxStatements"><value>${hibernate.c3p0.max_statements}</value></property>
<property name="initialPoolSize"><value>${hibernate.c3p0.min_size}</value></property>
<property name="user"><value>${jdbc.username}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
</bean>
db.properties 如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/zyw?useUnicode=true&characterEncoding=GBK
jdbc.username=root
jdbc.password=root
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=false
hibernate.c3p0.min_size=80
hibernate.c3p0.max_size=80
hibernate.c3p0.timeout=3000
hibernate.c3p0.max_statements=6000
hibernate.c3p0.idle_test_period=3000
hibernate.c3p0.acquire_increment=5
下面是一些可供使用的項(xiàng):
maxIdleTime:<!--最大空閑時(shí)間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 -->
acquireIncrement:<!--當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)。Default: 3 -->
maxStatements:<!--JDBC的標(biāo)準(zhǔn)參數(shù),用以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量。但由于預(yù)緩存的statements
屬于單個(gè)connection而不是整個(gè)連接池。所以設(shè)置這個(gè)參數(shù)需要考慮到多方面的因素。
如果maxStatements與maxStatementsPerConnection均為0,則緩存被關(guān)閉。Default: 0-->
idleConnectionTestPeriod:<!--每60秒檢查所有連接池中的空閑連接。Default: 0 -->
acquireRetryAttempts: