c3p0关于mysql8小时的问题

问题描述

jar包:c3p0-0.9.5-pre6.jar mchange-commons-java-0.2.6.3.jar背景:以前在使用ORM框架的情况下,使用连接池没出现过空闲连接超时的问题,现在新建个项目没什么框架,使用c3p0,代码如下:private static ComboPooledDataSource ds = null; static { try { ds = new ComboPooledDataSource(); ds.setDriverClass(Constant.DRIVER_CLASS_NAME); ds.setJdbcUrl(Constant.URL); ds.setUser(Constant.USERNAME); ds.setPassword(Constant.PASSWORD); ds.setMaxPoolSize(40); ds.setMinPoolSize(5); ds.setAutomaticTestTable("C3P0TestTable"); ds.setIdleConnectionTestPeriod(1800); ds.setTestConnectionOnCheckin(true); ds.setTestConnectionOnCheckout(true); ds.setMaxIdleTime(25000); } catch (PropertyVetoException e) { gLog.error("ComboPooledDataSource", e); } } public static synchronized Connection getConn() { Connection con = null; try { con = ds.getConnection(); } catch (SQLException e1) { gLog.error("getConn", e1); } return con; }有个线程用 getConn()获取连接后,长时间不进行数据库操作,隔天触发数据库操作时会报异常com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketExceptionMESSAGE: Software caused connection abort: socket write errorSTACKTRACE:java.net.SocketException: Software caused connection abort: socket write errorat 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:2637)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:144)** END NESTED EXCEPTION **Last packet sent to the server was 0 ms ago.at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2652)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:144)有个线程一直有进行数据库操作,则正常,因此判断是MYSQL8小时问题。但是代码里几个重要属性已经配置了,是否哪里还漏了,错了。求教!

解决方案

修改mysql的配置文件,http://www.2cto.com/database/201301/185712.html
解决方案二:
1、修改数据库配置interactive_timeout=?wait_timeout=?2、c3p0在断开连接时,不能自动重连,所以不能保证连接池有连接。3、建议使用proxool连接池。
解决方案三:
c3p0应该有闲置多少时间把连接返库的配置吧

时间: 2024-07-30 14:08:15

c3p0关于mysql8小时的问题的相关文章

连接池-MySQL8小时自动断开连接

问题描述 MySQL8小时自动断开连接 最近项目中使用连接池连接MySQL数据库, 过了8小时没人使用之后再使用就报错了 网上看了很多种解决方法, 但是没有满意答案 1. 修改mysql wait_timeout 配置 经理不让修改mysql配置. 据说最大也就修改为27天, 也是不大完美的方案. 2. jdbc url 添加authoReconnect=true. 无效 . 据说是mysql 5.0之前才支持 3. 设置maxIdleTime小于wait_timeout 使用Fabric, 其

使用spring+c3p0数据源,数据库是mysql。操作数据库直接使用JdbcTemplate,报错

问题描述 启动程序时查询数据库,将数据装入缓存.起来后不做操作,十分钟左右会有以下报错:1027/15:26:03<DEBUG>[com.mchange.v2.c3p0.impl.NewPooledConnection286]AThrowableoccurredwhiletryingtoresetthereadOnlypropertyofourConnectiontofalse!com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectio

浅析mysql交互式连接&amp;非交互式连接_Mysql

交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接.那么这时候就是非交互式操作.  在之前,我基本上不关系这两个属性,都是用的是mysql服务商推荐的默认值,就是8小时. 但是,从昨天开始,由于在新网租用了一个空间,而他

spring-mysql连接8小时后异常

问题描述 mysql连接8小时后异常 26-Aug-2015 08:27:41.925 SEVERE [http-apr-8099-exec-12] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [SpringWebController] in context with path [] threw exception [Request processing failed; ne

Java数据库连接池比较(c3p0,dbcp,proxool和BoneCP)

Java框架数据库连接池比较(c3p0,dbcp和proxool,BoneC) 现在常用的开源数据连接池主要有c3p0,dbcp,proxool,BoneCP,其中: ¨         hibernate开发组推荐使用c3p0; ¨         spring开发组推荐使用dbcp (dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect ,告诉连接被重置,这个设置可以解决); ¨         hibernate in action推荐使

java-tomcat服务器10几个小时不访问,用的是ssh,就会抛异常,如图

问题描述 tomcat服务器10几个小时不访问,用的是ssh,就会抛异常,如图 mysql也有加这个参数,但还是这样 this is myown dinifition for mysql connection timeout wait_timeout=2147483 interactive_timeout=2147483 解决方案 用连接池没??是不是长时间使用 链接未释放??? 解决方案二: 在hibernate.cfg.xml中配置如下 <property name="hibernat

c3p0的配置解释

找到了一个关于c3p0的配置  <c3p0-config>  <default-config>  <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 -->  <property name="acquireIncrement">3</property>  <!--定义在从数据库获取新连接失败后重复尝试的次数.Default: 30 -->  <property name=&q

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案_Mysql

解决这个问题的办法有三种: 1. 增加 MySQL 的 wait_timeout 属性的值. 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,红色部分 mysql> show variables like '%timeout%'; +--------------------------+-------+ | Vari

Mysql经典的“8小时问题”_Mysql

假设你的数据库是mysql,如果数据源配置不当,将可能发生经典的"8小时问题".原因是mysql在默认情况下,如果发现一个连接的空闲时间超过8小时,将会在数据库端自动关闭这个连接.而数据源并不知道这个连接已经关闭了,当它将这个无用的连接返回给某个dao时,dao就会报无法获取connection异常.     如果采用dbcp的默认配置,由于testOnBorrow属性的默认值是true,数据源在将连接交给dao前,会事先检测这个连接是否是好的,如果连接有问题(在数据库端被关闭),则会