`
puppy117
  • 浏览: 52176 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Mysq数据库8小时空闲后连接超时解决方法

    博客分类:
  • SQL
阅读更多

MySql数据库如果超过8小时处于空闲状态,则会自动断开连接,报连接超时错误,错误代码如下:

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: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)

 

如果使用hibernate自带的连接池则极易出现此问题,上网翻阅了大量的资料,现总结出解决此问题的几种方法:

(1)修改mysql的my.ini文件,增加如下配置:

[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

# added from now

socket = /tmp/mysql.sock

# 单位是秒,相当于24小时,原来默认为28800即8小时
wait_timeout=86400
interactive_timeout = 86400

# added end

(2)改用proxool连接池方法:

配置proxool.xml文件内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
	<proxool>
		<!--连接池的别名-->
		<alias>testDB</alias>
		<!--proxool只能管理由自己产生的连接-->
		<driver-url>
			jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=GBK&amp;autoReconnect=true&amp;zeroDateTimeBehavior=convertToNull
		</driver-url>
		<!--JDBC驱动程序-->
		<driver-class>com.mysql.jdbc.Driver</driver-class>
		<driver-properties>
			<property name="user" value="root" />
			<property name="password" value="root" />
		</driver-properties>
		<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
		<house-keeping-sleep-time>900000</house-keeping-sleep-time>
		<house-keeping-test-sql>
			select CURRENT_DATE
		</house-keeping-test-sql>
		<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的 用户连接就不会被接受-->
		<maximum-new-connections>20</maximum-new-connections>
		<!-- 最少保持的空闲连接数-->
		<prototype-count>5</prototype-count>
		<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的 等待请求数由maximum-new-connections决定-->
		<maximum-connection-count>100</maximum-connection-count>
		<!-- 最小连接数-->
		<minimum-connection-count>10</minimum-connection-count>
	</proxool>
</something-else-entirely>
 

 

配置hibernate.cfg.xml文件内容如下:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.provider_class">
			org.hibernate.connection.ProxoolConnectionProvider
		</property>
		<property name="hibernate.proxool.pool_alias">testDB</property>
		<property name="hibernate.proxool.xml">proxool.xml</property>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="show_sql">true</property>

		<mapping resource="tt/TT.hbm.xml" />	

	</session-factory>
</hibernate-configuration>

 java类中的调用方式如下:

Class.forName("org.hibernate.connection.ProxoolConnectionProvider");
			Connection con = DriverManager.getConnection("proxool.testDB");

 

用完连接后,记得释放就可以了。

当然还有其它连接池的配置方式,方法大致相同,就不在此一一列举。

分享到:
评论

相关推荐

    学生成绩管理系统数据库mysq数据库

    学生成绩管理系统数据库mysq数据库学生成绩管理系统数据库mysq数据库

    JDBC连接mysq数据库Demo

    使用DriverManager.getConnection()方法建立与MySQL数据库的连接。需要提供数据库URL、用户名和密码: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String ...

    汉字转的拼音 mysq数据库版本

    汉字转的拼库 mysq数据库版本 汉字转的拼库 mysq数据库版本

    mysq数据库命令行提示符操作方法

    本文将深入探讨如何利用命令行提示符进行MySQL数据库的操作,包括连接数据库、执行SQL语句、数据查询、表结构修改等核心知识点,旨在帮助读者全面理解并熟练运用这些技能。 ### 连接MySQL数据库 在开始任何数据库...

    mysq数据库8.0最新版

    最新安装板Mysql数据库,功能更强大,更好用,亲测真实可用。

    nodejs封装好的mysql数据库模块,带mysql连接池以及百万测试数据

    连接池是一组预先初始化的数据库连接,当需要执行数据库操作时,可以从池中获取一个连接,用完后再归还,而不是每次操作都创建新的连接。这降低了创建和销毁连接的开销,提升了整体性能。在本模块中,使用了`mysql2`...

    MySql数据库连接封装类

    - `getConnection()`: 获取数据库连接的方法,通常会实现连接池的逻辑,从池中获取或创建新的连接。 - `releaseConnection(Connection conn)`: 释放数据库连接,将其返回到连接池或者关闭。 4. **非静态方法**: ...

    mysq数据库高级笔记

    ### MySQL 数据库高级知识点解析 #### 一、B+树索引原理与存储空间占用 在MySQL中,索引是数据库性能优化的关键技术之一。一个索引实际上对应于一棵B+树,这棵树中的每一个节点代表一个数据页,通常一个页会占用16...

    java servlet关爱农民工网(mysq数据库)

    8. **性能优化**:通过缓存技术、负载均衡和数据库优化等手段,提升系统响应速度,应对高并发访问。 9. **异常处理**:良好的异常处理机制能保证系统在遇到错误时能够稳定运行,提供友好的错误提示,便于问题定位和...

    java连接数据库实现学生管理系统

    (使用MySq数据库实现) 2、在main函数中,实例化学生管理类,并根据菜单的选项分别调用4个方法。 二、设计思路 1、定义一个StudentSystemOpp类编写简单界面代码。 2、定义一个JDBCCutils类编写与数据库的连接与关闭...

    php版mysql大数据库备份和恢复工具

    如果你想将原来备份出的GBK数据导入到编码为UTF8数据库,则你的GBK数据中仅能含有GBK或GB2312的简体中文字符.不可以出现BIG5等繁体字符,否则转换将失败.基本上,一般的博客/论坛数据都不能保证这种纯净性,谁也不能保证...

    BBS 论坛模型 + mysq数据库 + struts2

    通过Action类,开发者可以定义处理用户请求的方法,并返回相应的视图。Struts2还支持OGNL(Object-Graph Navigation Language)表达式语言,方便在控制器和视图之间传递数据。 **MySQL数据库** MySQL是一个关系型...

    网络同学录 使用 jsp 和mysq 数据库 和servelt

    本项目采用Java Web技术栈,包括JSP(JavaServer Pages)、Servlet和MySQL数据库,构建了一个功能完善的网络同学录系统。 **1. JSP技术** JSP是Java的一种服务器端脚本语言,主要用于动态网页的开发。在本系统中,...

    mysq乱码解决问题

    以下是一些解决 MySQL 乱码问题的方法: 1. **命令行导入数据时的乱码** 当在不同的 MySQL 服务器之间迁移数据时,可能会遇到因字符集不兼容导致的乱码问题。在 Windows 上,可以通过在命令行中进入 MySQL 的 `bin...

    《MySQL数据库入门》教学设计.docx

    《MySQL数据库入门》教学设计是一份详尽的教学文档,旨在引导初学者逐步了解并掌握MySQL数据库的基本知识和操作。这份教学设计涵盖了从数据库基础到MySQL的实际应用,包括安装配置、启动登录等多个方面。 课程的...

    游戏支付平台

    使用说明: 数据库配置文件 config.php 这里主要配置: 一、连接数据库的参数:MYSQ数据库IP、MYSQ数据库用户名、MYSQ数据库名、MYSQ...支持连接任意一个MYSLQ数据库,只要你的站点或你的游戏是MYSQL数据库就可以使用的

    背10万单词库,mysq数据库直接运行

    10万单词库sql

    oracle数据导入到Mysq库

    "oracle2mysql"工具简化了这一过程,提供了一种有效的方法来实现数据的平滑过渡,但使用时仍需充分了解两个数据库系统的特性和差异,以及迁移工具的具体操作流程,以确保迁移的成功和数据的完整性。

    MYSQL不能从远程连接的解决方法

    ### MySQL无法进行远程连接的解决方法 在使用MySQL数据库时,有时可能会遇到无法从远程主机进行连接的问题。本文将详细探讨这一问题的原因以及提供几种有效的解决策略。 #### 一、问题背景与现象 当你尝试从远程...

    基于spring Boot + MyBatis + MySQ数据库课程设计-医院药品管理系统

    数据库课程设计 库存管理 登记入库的药品。 登记出库的药品。 每日检查库存下限,报警。 每日检查过期的药品,报警并做退回销毁处理。 对有问题的药品的退回供应商。记录退回的药品的名称、数量、金额和退货原因等...

Global site tag (gtag.js) - Google Analytics