`
kree
  • 浏览: 129227 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java.net.SocketException: Broken pipe /Mysql在经过8小时不使用后会自动关闭已打开的连接

阅读更多

 

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。  

 

解决这个问题的办法有三种:  

 

 

1. 增加 MySQL 的 wait_timeout 属性的值。  
  
修改 /etc/mysql/my.cnf 文件,在 [mysqld] 节中设置:  
  
# Set a connection to wait 8 hours in idle status.  
  
wait_timeout = 86400  
  
2. 减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值。  
  
修改 c3p0 的配置文件,设置:  
  
# How long to keep unused connections around(in seconds)  
  
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)  
  
# so ensure this value is below MySQL idle timeout  
  
cpool.maxIdleTime=25200  
  
在 Spring 的配置文件中:  
  
<bean id="dataSource"  
  
    class="com.mchange.v2.c3p0.ComboPooledDataSource">  
  
    <property name="maxIdleTime" value="${cpool.maxIdleTime}" />  
  
    <!-- other properties -->  
  
</bean>  
  
3. 定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。  
  
修改 c3p0 的配置文件,设置:  

# Prevent MySQL raise exception after a long idle time  
  
cpool.preferredTestQuery='SELECT 1'  
  
cpool.idleConnectionTestPeriod=18000  
  
cpool.testConnectionOnCheckout=true  

修改 Spring 的配置文件:  

<bean id="dataSource"  
  
    class="com.mchange.v2.c3p0.ComboPooledDataSource">  
  
    <property name="preferredTestQuery"  
  
        value="${cpool.preferredTestQuery}" />  
  
    <property name="idleConnectionTestPeriod"  
  
        value="${cpool.idleConnectionTestPeriod}" />  
  
    <property name="testConnectionOnCheckout"  
  
        value="${cpool.testConnectionOnCheckout}" />  
  
    <!-- other properties -->  
  
</bean>   

附:以下 awk 脚本可以用以将 c3p0.properties 文件中的属性设置转换成为 applicationContext.xml 中 数据库连接池 DataSource 所需的 XML 元素形式。  
  
#!/bin/awk  

BEGIN {  
    FS="=";  
}  
{  
    if (NF == 2) {  
        if ((x=index($1, ".")) > 0) {  
            property_name = substr($1, x+1, length($1));  
        } else {  
            property_name = $1;  
        }  
        printf("<property name="%s" value="${%s}"/> ", property_name, $1);  
    }  
}  
 
分享到:
评论

相关推荐

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES错误是一种常见的网络编程错误,发生在Java应用程序中, especialmente 在 Linux 操作系统中。该错误的出现是由于进程打开的文件数量超过了操作系统的限制,导致服务器...

    java.net.SocketException Connection reset 解决方法

    "java.net.SocketException Connection reset 解决方法" 在 Java 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...

    java.net.SocketException: No route to host 异常原因

    NULL 博文链接:https://zhoudan241.iteye.com/blog/1432014

    java.net.SocketException: Connection reset 解决方法

    Java中的`java.net.SocketException: Connection reset`是一个常见的网络编程错误,通常表示在TCP/IP通信过程中,连接突然中断。这个异常可能在客户端或服务器端发生,通常与数据传输的异常中断有关。 首先,我们来...

    在Win7系统下抛出java.net.SocketException的解决办法

    - **SocketException**: 当尝试在网络层面上建立连接时,如果无法识别到有效的IPv4地址,将会抛出`java.net.SocketException`异常。在本例中,错误代码“0”表示无法找到与网络接口关联的IPv4地址。这种情况通常发生...

    http接口调用报错.rar

    接口调用报错:java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory

    Java Socket常见异常处理

    5. **java.net.SocketException: Broken pipe** 在`Connect reset by peer`异常之后继续尝试写操作时,可能会遇到此异常。同样,需要确保在连接断开后不再进行无效的读写操作,并及时关闭Socket。 编写网络程序时...

    Linux下打开的文件过多错误

    Linux下运行tomcat或者was出现java.net.SocketException: 打开的文件过多错误 tomcat报“too many open files”的错误,解决办法如下:

    fastdfs使用java

    在Java中使用FastDFS,首先需要在项目中引入FastDFS的Java客户端库。配置client.conf文件,设置tracker服务器的地址和其他相关参数。接着创建FastdfsClient和FastdfsUtil类,前者用于与FastDFS服务器通信,后者封装...

    connection reset解决方案(亲测可用).md

    connection reset解决方案(亲测可用).md

    Socket长连接异常处理

    java.net.SocketException: Broken pipe 该异常可能发生在客户端和服务器端,原因是在连接断开后继续写数据。解决方法是确保在关闭连接前完成所有的数据传输,并检测对方的关闭连接操作。 编写网络程序时需要注意...

    Ice-3.7.4.msi for windows版

    6 连接突然断开(比如对方因为段错误而程序停止,或者在连接过程中正常关闭) : 发生在使用代理调用接口的时候(连接丢失) 原因: 已经建立连接的对方突然断开 错误信息: warning: connection exception: ...

    Google I/O 2013推荐Android 网络通信框架Volley

    Volley是Google在2013年的I/O大会上推出的一款高效的Android网络通信框架,它专为Android应用设计,旨在简化网络请求的处理,提高应用程序的响应速度和用户体验。这款框架的核心理念是快速、高效和易用,使得开发者...

    java.net.SocketException(解决方案).md

    项目中碰到的,记录一下解决方案

    如何解决线程太多导致java socket连接池出现的问题

    3. 错误信息:当Socket连接池出现问题时,可能会出现错误信息,如"java.net.SocketException: No buffer space available (maximum connections reached?): listen failed"。 解决方法 要解决线程太多导致Socket...

    javaerror处理资料

    java.net.SocketException: Broken pipe 此异常与第4种异常类似,都是因为远程主机突然断开了连接。区别在于前者更多出现在写操作时,而后者则更普遍。为了避免这类异常,可以定期检测Socket的状态,例如通过设置...

    Hive2Hive-master.rar

    在IT行业中,Socket编程是一种广泛使用的网络通信技术,它允许两个网络应用程序通过互联网进行数据交换。在本项目“Hive2Hive-master”中,我们关注的是如何利用Socket技术实现Hive数据的同步。Hive是Apache软件基金...

    System.SR.dll 无法显示错误信息

    在PDA开发时经常会遇到下面的错误,原因是缺少一个dll,只要在项目中引用这个dll就可以获得错误的描述,然后根据错误提示在解决问题!System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可...

    Java实现modbus tcp协议数据读写,项目内包含modbus slave仿真软件

    在工业自动化领域,Modbus协议是一种广泛使用的通信协议,它允许设备之间进行数据交换。本项目专注于使用Java语言实现Modbus TCP/IP协议的读写功能,提供了两种不同的实现方案:jlibmodbus和modbus4j库。这两种库都...

Global site tag (gtag.js) - Google Analytics