- 浏览: 25410 次
- 性别:
- 来自: 北京
最新评论
-
martintree:
叶子 写道一朋友的朋友(非IT) 把9K薪水的工作(不需要加班 ...
朋友想挣钱(聊天记录) -
叶子:
一朋友的朋友(非IT) 把9K薪水的工作(不需要加班 在我看起 ...
朋友想挣钱(聊天记录) -
xieye:
卖安利?通过害人的方式来赚钱的事还是少做点吧
朋友想挣钱(聊天记录) -
lixigua:
想挣钱?
不要做软件。 2个同事,一个项目经理,一个程序员。 ...
朋友想挣钱(聊天记录) -
martintree:
hereyouare 写道感谢共享经验~~~
不客气
Websphere Application Server (WAS) 中应用的哪一个 web.xml 在起作用
全文转自:http://www.blogjava.net/Alpha/archive/2009/09/01/262789.html#293388
官方文档 : http://www.mchange.com/projects/c3p0/index.html
解决MYSQL 8小时问题
最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
java 代码
查看了Mysql的文档,以及Connector/J的文档以及在线说明发现,出现这种异常的原因是:
Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有 Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。
解决的方法有3种:
1.增加wait_timeout的时间。
2.减少Connection pools中connection的lifetime。
3.测试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.iteye.com/article/38506
我自己的配置:
官方文档 : 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>
解决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种:
1.增加wait_timeout的时间。
2.减少Connection pools中connection的lifetime。
3.测试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.iteye.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>
发表评论
-
Java常见异常
2012-03-12 14:32 0本文重在Java中异常机制的一些概念。写本文的目的在于方便我很 ... -
JAVA线程池代码浅析
2011-11-02 16:45 0[img] http://www.blogjava.net/i ... -
全国省市数据
2011-07-13 10:59 0--不足:23山东和16山东重复 --创建DBPromary数 ... -
[转]Struts1和Struts2的区别和对比
2010-12-11 17:14 0Struts作为MVC 2的Web框架 ... -
(转)利用Google在线翻译引擎制作自己的多国语言翻译机
2010-11-15 13:24 3047出处:http://www.blogjava.net/ekin ... -
(转)设计模式之事务处理
2010-11-15 11:04 762出处:http://dennis-zane.iteye.com ... -
连接池配置参数
2010-11-12 15:22 0最小池大小:连接池中可保持的最小连接数。 最大池大小:连接池 ... -
DB2 重定向恢复备份(包括日志的online备份)
2010-04-14 18:06 3307生产服务器:Windows sever 2003 servi ... -
mysql 查看字符集的一些命令
2009-12-09 22:25 0show table status from mycms ... -
mysql中文乱码
2009-12-09 22:14 992关于这个题目的探讨网上的文章已经是多如牛毛了,今天我也来凑个热 ... -
spring struts2 整合时报Unable to instantiate Action 错
2009-12-09 12:48 5709报错内容为: Unable to instantiate ... -
框架中常用的jar包作用
2009-12-08 21:53 855出处: http://origin100.iteye.com/ ...
相关推荐
以下是对C3P0配置中各个属性的详细解释: 1. `acquireIncrement`:当连接池中的连接耗尽时,C3P0一次性尝试获取的连接数。默认值为3,意味着如果连接池中没有可用连接,会尝试同时获取3个新的连接。 2. `...
c3p0 配置文件详细配置 C3P0 是一个流行的开源连接池实现,广泛应用于 Java 企业级应用中。C3P0 配置文件是关键的配置文件,用于控制连接池的行为。本文将详细介绍 C3P0 配置文件中的各个参数,并对其进行解释。 ...
以下是一些重要的 C3P0 配置属性及其详细说明: 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时获取的连接数,默认为3。增加此值可以更快地响应高并发请求,但会增加数据库服务器的压力。 2. `...
c3p0配置文件
在你的博客文章(链接已提供)中,你应该会详细介绍如何集成C3P0,包括如何在代码中创建数据源,如何加载配置文件,以及如何在实际应用中使用连接池服务。通过这种方式,你可以避免频繁的数据库连接创建和关闭,提高...
<c3p0-config> <!--默认配置--> <default-config> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> ...
通过对以上参数的详细解析,我们可以看出c3p0配置不仅涉及连接池的基本管理,还涵盖了连接的生命周期管理、资源优化以及安全性控制等多个方面。合理配置这些参数,可以使c3p0更好地适应不同应用场景的需求,提高...
本篇将详细介绍如何在Spring中配置C3P0连接池。 首先,我们需要理解C3P0的基本概念。C3P0是由Miquel Delgado开发的,它提供了数据库连接的自动管理,包括连接创建、回收、测试等。C3P0的主要特点包括支持JDBC3规范...
配置C3P0连接池时,开发者通常需要在配置文件(如Hibernate的`hibernate.cfg.xml`或Spring的`applicationContext.xml`)中指定以下参数: - `driver_class`: 数据库驱动类名,例如`com.mysql.jdbc.Driver`。 - `...
内容概要:c3p0连接池需要jar包.rar以及相关配置文件 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。 适合人群:正在学习...
4. **优化C3P0配置**:根据实际应用的负载情况,调整C3P0的配置参数,例如测试发现数据库访问高峰时经常出现连接不足的情况,可以适当增加`maxPoolSize`;如果服务器资源有限,可以降低`minPoolSize`以减少内存占用...
下面将详细介绍C3P0的配置及其相关知识点。 1. **C3P0基本概念** - **数据源(DataSource)**:是JDBC API中用于管理数据库连接的接口,它提供了一种存储和获取数据库连接的方式。 - **连接池(Connection Pool)...
**C3P0连接池配置详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点是轻量级、高效且稳定,广泛应用于各种Java Web应用中。在本文中,我们将深入探讨...
下面将详细介绍c3p0的配置和使用方法。 ### 1. 添加依赖 在项目中使用c3p0,首先需要在构建文件(如Maven的pom.xml或Gradle的build.gradle)中添加c3p0的依赖。例如,对于Maven项目,可以在`<dependencies>`标签内...
C3P0的配置通常通过`c3p0.properties`文件完成,该文件一般位于项目的`WEB-INF\classes`目录下,确保被类加载器正确加载。配置文件中的参数众多,下面列举几个关键参数及其作用: - `c3p0.driverClass`:指定数据库...