- 浏览: 128848 次
- 性别:
- 来自: 上海
最新评论
-
ranweizheng:
luokery 写道有失真...显然,存在失真是必然的,只是怎 ...
Java图片缩小后不失真的代码(缩略图) -
szhnet:
kree 写道szhnet 写道其实我在1楼说的不对,那个不能 ...
非阻塞通信,《Java网络编程精解》指误。 -
kree:
szhnet 写道其实我在1楼说的不对,那个不能用到达输入流的 ...
非阻塞通信,《Java网络编程精解》指误。 -
szhnet:
其实我在1楼说的不对,那个不能用到达输入流的未尾来理解。
非阻塞通信,《Java网络编程精解》指误。 -
leaow567:
同意楼上的观点
非阻塞通信,《Java网络编程精解》指误。
<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。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
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的文档。 我自己的配置: 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>
发表评论
-
c3p0 com.mysql.jdbc.CommunicationsException异常
2010-06-08 16:19 1279使用c3p0,偶尔会报异常: ERROR Thread-4 ... -
Mysql数据库的高级查询 多表查询,联表查询
2010-06-08 16:08 3362最近在做一个PHP+MYSQL的项目,说实话,第一次呢 不断 ... -
MySQL Join详解
2010-06-08 14:55 990还是先 Create table 吧 create ... -
玩转MySQL的外键约束之级联删除篇
2010-06-08 14:51 1338如今,许多关系型数据库管理系统都提供了外键约束这一强大的功能特 ... -
mysql的java连接池,用openSTA测试50人并发访问一万次,没有出现问题,很好用
2010-06-08 14:41 1263package com.gosafari.service; ... -
最规范的java连接mysql的实例
2010-06-08 14:33 1493import java.sql.Connection; ... -
MySQL模糊查询语法(推荐)
2010-06-08 14:28 1771$sql="select * from table_ ... -
设计高效合理的MySQL查询语句讲解
2010-06-08 14:19 1227数据库系统是管理信息 ... -
完整的连接池类
2010-06-08 14:09 1057Oracle连接池需要odbc连 ... -
如何用SQLyog来分析MySQL数据库详解
2010-05-05 17:23 1311用SQLyog来分析MySQL数据 ... -
MySQL数据库两台主机同步实战
2010-05-05 17:20 2226MySQL支持单向、异步复制,复制过程中一个服务器充当 ... -
mysql二进制增量备份
2010-05-05 17:18 2117mysqlbinlog -u root -p*** v:/ ... -
MySQL服务器的log-bin功能
2010-05-05 17:13 2278装mysql,运行一段时间后,在mysql目录下出现一堆类似m ... -
mysql事务处理
2010-05-05 17:10 6554由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的 ... -
深入浅出mysql事务处理和锁机制
2010-05-05 17:09 11601. 事务处理和并发 ... -
MYSQL数据库常用命令集合
2010-05-05 16:37 978Mysql数据库是一个多用户,多线程的关系型数据库,是一个客户 ... -
java.net.SocketException: Broken pipe /Mysql在经过8小时不使用后会自动关闭已打开的连接
2010-05-05 16:34 2177MySQL 的默认设置下,当一个连接的空闲时间超过8小时 ... -
Mysql Date_format 及时间相关用法
2010-05-05 14:16 23860下面的查询选择了所有 ...
相关推荐
以下是对C3P0配置中各个属性的详细解释: 1. `acquireIncrement`:当连接池中的连接耗尽时,C3P0一次性尝试获取的连接数。默认值为3,意味着如果连接池中没有可用连接,会尝试同时获取3个新的连接。 2. `...
以下是一些重要的 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`:指定数据库...