官方文档 : 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使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
java 代码
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_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有 Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。
解决的方法有3种:
增加wait_timeout的时间。
减少Connection pools中connection的lifetime。
测试Connection pools中connection的有效性。
当然最好的办法是同时综合使用上述3种方法,下面就DBCP和C3P0分别做一说明,假设wait_timeout为默认的8小时
DBCP增加以下配置信息:
//set to 'SELECT 1'
validationQuery = "SELECT 1"
//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"
testOnBorrow = "true"
C3P0增加以下配置信息:
//获取connnection时测试是否有效
testConnectionOnCheckin = true
//自动测试的table名称
automaticTestTable=C3P0TestTable
//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
更多的配置信息大家可以查看C3P0文档,Connector/J文档,以及DBCP的文档。
转: http://www.javaeye.com/article/38506
我自己的配置:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl = jdbc:mysql://localhost:3306/test
jdbc.user = root
jdbc.password = 12345
jdbc.miniPoolSize = 1
jdbc.maxPoolSize = 20
jdbc.initialPoolSize = 1
jdbc.maxIdleTime = 25000
jdbc.acquireIncrement = 1
jdbc.acquireRetryAttempts = 30
jdbc.acquireRetryDelay = 1000
jdbc.testConnectionOnCheckin = true
jdbc.automaticTestTable = c3p0TestTable
jdbc.idleConnectionTestPeriod = 18000
jdbc.checkoutTimeout=3000
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="minPoolSize" value="${jdbc.miniPoolSize}" />
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${jdbc.maxIdleTime}"/>
<property name="acquireIncrement" value="${jdbc.acquireIncrement}"/>
<property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}"/>
<property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}"/>
<property name="testConnectionOnCheckin" value="${jdbc.testConnectionOnCheckin}"/>
<property name="automaticTestTable" value="${jdbc.automaticTestTable}"/>
<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/>
<property name="checkoutTimeout" value="${jdbc.checkoutTimeout}"/>
</bean>
分享到:
相关推荐
6. **整合c3p0**:在Spring配置文件中引入c3p0的数据源,并在Hibernate配置文件中指定使用该数据源。 7. **编写视图**:使用JSP或FreeMarker等技术创建视图,根据Struts2的结果转发规则进行页面跳转。 8. **测试...
为了确保项目的正常运行,需要正确配置各框架的配置文件(如Spring的bean配置、MyBatis的mybatis-config.xml、数据库连接配置等),并根据实际需求调整c3p0的连接池参数。同时,还需要理解各组件之间的协作机制,如...
例如,使用Apache的DBCP或C3P0库。在`web.xml`或单独的配置文件中设置连接池参数,如数据源、最大连接数、最小连接数、超时时间等。以下是一个DBCP的示例配置: ```xml ``` 6. **MySQL配置**:...
这个"spring + struts2 + hibernate3整合的jar包集合"提供了这三个框架的核心库,以及c3p0和DBCP数据库连接池的依赖,使得开发者可以快速搭建一个完整的MVC架构应用。 Spring框架是一个全面的后端解决方案,它提供...
该代码旨在完成一个MVC模式的学生管理系统,系统中使用DBUtil+C3P0数据库连接池连接mysql数据库,其中数据库的名称可以查询C3P0的配置文件,系统界面通过jstl标签用于展示数据,系统中含有分页代码。系统思路通过...
通过配置C3P0的参数,如maxPoolSize、minPoolSize等,可以调整连接池的大小,以适应不同规模的应用需求。 四、MySQL数据库 MySQL是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用的特点受到开发者...
4. 集成C3p0:在Hibernate配置中引入C3p0连接池,配置相关参数。 5. 编写业务逻辑:使用Spring管理的Bean,通过Hibernate操作数据库。 6. 创建ActionForm和Action类,实现用户请求的处理和视图的跳转。 在实际开发...
在SSH项目中,通常会配置C3P0作为Spring的数据源,管理和优化数据库连接。 "webApp"这个目录可能包含了以下结构: - WEB-INF:存放web应用的配置文件,如struts-config.xml(Struts配置)、spring-context.xml...
同时,还需要引入工具类`C3P0Utils`和配置文件`c3p0-config.xml`,以管理数据库连接。 4. **配置文件修改**:在`c3p0-config.xml`中,你需要配置数据库连接的相关参数,如数据库URL、用户名、密码和连接池的配置...
2. **数据源配置**:虽然Struts1.3本身并不直接处理数据库连接,但可以通过配置`<plug-in>`元素来集成第三方的数据源,如C3P0或DBCP。 3. **ActionForm配置**:`<form-beans>`标签用于定义表单bean,每个ActionForm...
可能包含了SSH框架集成的配置文件(如struts.xml、spring.xml、hibernate.cfg.xml)、实体类(Entity)、DAO(Data Access Object)层、Service层、Action层的代码,以及可能的Oracle10g数据库的配置和c3p0连接池的...
常见的JDBC连接池实现有Apache的DBCP、C3P0,以及更现代的HikariCP等。这些库都提供了完善的API和配置选项,便于开发者集成到自己的项目中。 综上所述,JDBC连接池是提升Java应用程序数据库访问效率的关键技术之一...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了更高级的性能和配置选项。通过C3P0,项目可以有效地管理和复用数据库连接,提高系统资源利用率,避免频繁创建和关闭连接带来的性能开销。 同时,项目...
4. **c3p0链接池**: c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了一套配置灵活的数据库连接池。c3p0可以帮助管理数据库连接,提高数据库操作的效率,减少资源消耗。 在SSH整合中,这些jar包如何...
C3P0的配置通常在Spring的配置文件中完成,通过`<bean>`标签定义数据源。 最后,项目提到了2级缓存。在Hibernate中,2级缓存可以提高性能,它存储了多个会话间的持久化对象。Spring和Hibernate可以通过EHCache或...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了数据库连接的自动创建、释放和管理,能有效提高数据库连接的利用率,降低系统资源消耗。 为了整合这些框架,我们需要在项目的类路径下添加相应的jar...
6. **C3P0**:`c3p0-0.9.1.2.jar`是一个开源的JDBC连接池,它提供了一套数据库连接管理策略,可以有效地管理和复用数据库连接,提高应用程序的性能和资源利用率。 7. **Commons DBCP**:`commons-dbcp-1.2.1.zip`是...
运用知识数据库基本查询数据库连接池c3p0运用dbutil.jar包一键封装表单数据到bean对象中利用dbutils.jar包简化对数据库增,删,改,查的代码标签库JavaWeb三层框架的分离将servlet的转发,重定向和方法进行封装,...
- DMETL Web Console 支持C3P0连接池的配置,通过调整连接池的相关参数来优化系统性能。 - 主要参数包括:初始化连接数、最小连接数、最大连接数、最大空闲时间等,用户可根据实际场景调整这些参数以获得最佳性能。 ...