`
lvmlvy
  • 浏览: 44558 次
社区版块
存档分类
最新评论

Mysql连接过期导致dbcp连接池中连接的使用异常

    博客分类:
  • java
 
阅读更多

异常信息:

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)
 at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
 at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
 at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
 at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
 at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232)
 at com.mysql.jdbc.DatabaseMetaData.getUserName(DatabaseMetaData.java:6452)
 at org.apache.commons.dbcp.DelegatingConnection.toString(DelegatingConnection.java:104)
 at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.toString(PoolingDataSource.java:344)
 at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:225)
 at $Proxy0.toString(Unknown Source)
 at java.lang.String.valueOf(String.java:2827)
 at java.lang.StringBuffer.append(StringBuffer.java:219)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:186)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:220)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:267)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:261)
 at com.hisense.hitv.microblog.dao.impl.ThirdPartyMicroBlogDaoImpl.getVisibleMicroBlog(ThirdPartyMicroBlogDaoImpl.java:20)
 at com.hisense.hitv.microblog.service.impl.MicroblogServiceImpl.getMblogList(MicroblogServiceImpl.java:63)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 at $Proxy12.getMblogList(Unknown Source)
 at com.hisense.hitv.microblog.facade.impl.MicroblogFacadeImpl.getMblogListExt(MicroblogFacadeImpl.java:182)
 at com.hisense.hitv.server.CamServiceImpl.getMblogListExt(CamServiceImpl.java:279)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
 at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:50)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 at $Proxy13.getMblogListExt(Unknown Source)
 at com.hisense.hitv.server.serverrpc.CamService$Processor$getMblogListExt.getResult(CamService.java:3193)
 at com.hisense.hitv.server.serverrpc.CamService$Processor$getMblogListExt.getResult(CamService.java:1)
 at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
 at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
 at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:176)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **

 

Last packet sent to the server was 0 ms ago.

 

Mysql服务器默认的“wait_timeout”是28800秒,即为8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。connections如果空闲超过8小时,Mysql将其断开,而DBCP并不知道该connection已经失效,如果这时有 Client请求connection,DBCP将该失效的Connection提供给Client,将会造成上面的异常。
        mysql配置中的wait_timeout值一定要大于等于连接池种的idle_timeout 值。否则mysql会在wait_timeout的时间后关闭连接,然而连接池还认为该连接可用,这样就会产生异常。

mysql中如何查看wait_timetout:进入mysql命令  输入命令:

 

mysql> show global variables like 'wait_timeout';

 


 一般不建议修改mysql默认的wait_timeout值。

 

直接在dbcp的配置中简单配置即可:

timeBetweenEvictionRunsMillis = 20000

//这个值要小于mysql中的 'wait_timeout' 28800   

//这个值要小于mysql中的 'wait_timeout' 28800

 


7.minEvictableIdleTimeMillis = 28000

 

 

 

 

timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

 

DBCP连接池说明:driverClassNameurlusernamepassword上面四个分别是驱动,连接字符串,用户名和密码。

maxActive连接池支持的最大连接数。

maxIdle连接池中最多可空闲maxIdle个连接。

minIdle连接池中最少空闲maxIdle个连接。

initialSize初始化连接数目。

maxWait连接池中连接用完时,新的请求等待时间,毫秒。

timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止主要把这两个参数加上就好。

minEvictableIdleTimeMillis连接池中连接可空闲的时间。

毫秒removeAbandonedtrue,false,是否清理。

removeAbandonedTimeout秒没有使用的活动连接,清理后并没有放回连接池。

removeAbandonedTimeout活动连接的最大空闲时间。

logAbandonedtrue,false,连接池收回空闲的活动连接时是否打印消息。

minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不样。

minEvictableIdleTimeMillis针对连接池中的连接对象。

removeAbandonedTimeout针对未被close的活动连接。

分享到:
评论

相关推荐

    DBCP连接池所有jar包

    总的来说,DBCP连接池是Java Web开发中管理数据库连接的重要工具,通过合理配置和使用,可以显著提升应用的性能和稳定性。在实际项目中,需要根据具体需求调整连接池参数,以达到最佳的资源利用率和系统性能。

    dbcp连接池jar

    DBCP(Database Connection Pool)是Apache组织提供的一种开源数据库连接池组件,主要...总的来说,DBCP连接池是Java应用程序中用于高效管理数据库连接的重要工具,通过合理的配置和使用,可以显著提升系统运行效率。

    mysql连接池

    在Java开发中,常见的MySQL连接池实现有Apache的DBCP、C3P0、HikariCP以及Tomcat JDBC Connection Pool等。这些连接池库提供了配置参数,允许开发者调整连接的最大数量、最小数量、超时时间、空闲连接检查频率等,以...

    mysql数据连接池

    MySQL 数据连接池是一种数据库管理技术,它在应用服务器和数据库之间起到了中介的作用,优化了数据库的连接使用,提高了系统的性能和资源利用率。在Java、Python等编程语言中,都有相应的库或框架支持数据连接池的...

    连接池DBCP需要的jar包

    这个JAR文件是Apache Commons Pool库,它是DBCP连接池实现的基础。它提供了一个通用的对象池服务,允许其他组件(如DBCP)创建和管理对象池。在DBCP中,这些对象就是数据库连接。Commons Pool提供了对象生命周期...

    自定义的数据库连接池

    数据库连接池是数据库管理中的重要概念,它在Java Web应用中尤其常见,主要用于优化数据库的连接管理和资源利用。自定义数据库连接池是为了更好地适应特定应用的需求,提高数据存取的效率,减少系统开销,避免频繁...

    数据连接池有用的jar包

    数据连接池在IT行业中扮演着至关重要的角色,尤其是在大型企业级应用系统中。它是一种管理数据库连接的技术,通过复用已存在的数据库连接,避免频繁创建和销毁连接带来的性能开销,提高了系统的运行效率和资源利用率...

    java常用数据库及连接池jar包

    - **监控与维护**:连接池会定期检查并清理过期或不可用的连接,保证连接的有效性和安全性。 4. **配置与使用** - 在Java项目中,通常通过配置文件(如`application.properties`或`web.xml`)来设定连接池的参数...

    dpcp连接池工具类

    在Java开发中,常见的数据库连接池有C3P0、DBCP、HikariCP等,而DPCP可能是某特定项目或公司自定义的一个连接池实现。 使用DPCP连接池工具类,首先需要在项目中导入相应的jar包,这个jar包包含了DPCP的实现代码和...

    commons-dbcp-1.2.1.zip

    - **testpool.jocl**:这是一个测试类,用于验证DBCP连接池的功能。它通常包含各种测试用例,以确保组件在不同场景下的正确工作。 - **org**:这个目录包含了所有相关的Java源代码,它们组织在org.apache.commons....

    proxool 连接池实例

    与C3P0、DBCP、HikariCP等其他连接池相比,Proxool在小型项目或测试环境中表现出色,尤其适合那些对资源管理和性能调整有特定需求的场景。 **二、Proxool的工作原理** Proxool维护了一个连接池,当应用程序需要...

    tomcat连接池配置方法.rar

    2. **Tomcat内置的连接池组件**:Tomcat自身提供了一个名为Apache Commons DBCP(数据库连接池)的组件,但在较新的版本中,推荐使用Apache Tomcat JDBC Connection Pool,也就是Tomcat自己的JDBC连接池实现。...

    myql_dpcp2所有jar包 commons-pool2-2.4.2 commons-dbcp2-2.1

    DBCP2提供了连接验证、池化策略、空闲连接检测等高级特性,是Java应用中常用的数据库连接池实现。 3. **Apache Commons Pool2 (commons-pool2-2.4.2.jar)**:Apache Commons Pool是对象池设计模式的一个实现,主要...

    springmvc+redis+mysql(数据库连接简单实现)数据缓存

    对于MySQL,配置数据库连接,通常是在Spring配置文件中创建`DataSource` bean,如使用Apache Commons DBCP或HikariCP连接池。设置数据库URL、用户名、密码等属性。 接下来,实现数据缓存。当需要查询数据库时,先...

    需要用的jar包.zip

    本文将详细介绍两个常用的数据库连接池实现:Apache的DBCP和c3p0,并结合提供的jar包文件,解析其工作原理和使用方法。 一、Apache DBCP(Jakarta Commons DBCP) Apache DBCP是Apache软件基金会提供的一个开源...

    connectionPool:Java数据库连接池

    在Java中,常用的数据库连接池实现有C3P0、DBCP、HikariCP、Apache DBCP2以及Tomcat JDBC Connection Pool等。这些连接池组件都提供了配置参数,用于调整连接池的行为,以适应不同应用场景的需求。 例如,`resource...

    Mysql经典的“8小时问题”

    这个问题通常在应用程序中使用数据库连接池时出现,因为连接池可能会在不知情的情况下返回一个已经被服务器关闭的连接。 在数据库连接池中,Apache Commons DBCP(DB Connection Pool)是一个常见的实现。在DBCP中...

    druid jar包.rar

    1. **性能优越**:Druid通过内置的BufferPool和高效的连接管理策略,提供了比其他连接池如C3P0、DBCP更高的性能。它采用了双缓冲池的设计,使得数据读写更加高效。 2. **强大的监控能力**:Druid提供了丰富的监控...

    CAS单点登录学习笔记五之CAS服务器数据源

    4. 连接池实现:CAS支持多种连接池实现,如Apache Commons DBCP、C3P0、HikariCP等。每种连接池都有其特定的配置属性,如最大连接数、最小连接数、超时时间等。 5. 数据源初始化脚本:在CAS启动时,可能会执行一些...

Global site tag (gtag.js) - Google Analytics