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&characterEncoding=GBK&autoReconnect=true&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数据库
使用DriverManager.getConnection()方法建立与MySQL数据库的连接。需要提供数据库URL、用户名和密码: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String ...
汉字转的拼库 mysq数据库版本 汉字转的拼库 mysq数据库版本
本文将深入探讨如何利用命令行提示符进行MySQL数据库的操作,包括连接数据库、执行SQL语句、数据查询、表结构修改等核心知识点,旨在帮助读者全面理解并熟练运用这些技能。 ### 连接MySQL数据库 在开始任何数据库...
最新安装板Mysql数据库,功能更强大,更好用,亲测真实可用。
连接池是一组预先初始化的数据库连接,当需要执行数据库操作时,可以从池中获取一个连接,用完后再归还,而不是每次操作都创建新的连接。这降低了创建和销毁连接的开销,提升了整体性能。在本模块中,使用了`mysql2`...
- `getConnection()`: 获取数据库连接的方法,通常会实现连接池的逻辑,从池中获取或创建新的连接。 - `releaseConnection(Connection conn)`: 释放数据库连接,将其返回到连接池或者关闭。 4. **非静态方法**: ...
### MySQL 数据库高级知识点解析 #### 一、B+树索引原理与存储空间占用 在MySQL中,索引是数据库性能优化的关键技术之一。一个索引实际上对应于一棵B+树,这棵树中的每一个节点代表一个数据页,通常一个页会占用16...
8. **性能优化**:通过缓存技术、负载均衡和数据库优化等手段,提升系统响应速度,应对高并发访问。 9. **异常处理**:良好的异常处理机制能保证系统在遇到错误时能够稳定运行,提供友好的错误提示,便于问题定位和...
(使用MySq数据库实现) 2、在main函数中,实例化学生管理类,并根据菜单的选项分别调用4个方法。 二、设计思路 1、定义一个StudentSystemOpp类编写简单界面代码。 2、定义一个JDBCCutils类编写与数据库的连接与关闭...
如果你想将原来备份出的GBK数据导入到编码为UTF8数据库,则你的GBK数据中仅能含有GBK或GB2312的简体中文字符.不可以出现BIG5等繁体字符,否则转换将失败.基本上,一般的博客/论坛数据都不能保证这种纯净性,谁也不能保证...
通过Action类,开发者可以定义处理用户请求的方法,并返回相应的视图。Struts2还支持OGNL(Object-Graph Navigation Language)表达式语言,方便在控制器和视图之间传递数据。 **MySQL数据库** MySQL是一个关系型...
本项目采用Java Web技术栈,包括JSP(JavaServer Pages)、Servlet和MySQL数据库,构建了一个功能完善的网络同学录系统。 **1. JSP技术** JSP是Java的一种服务器端脚本语言,主要用于动态网页的开发。在本系统中,...
以下是一些解决 MySQL 乱码问题的方法: 1. **命令行导入数据时的乱码** 当在不同的 MySQL 服务器之间迁移数据时,可能会遇到因字符集不兼容导致的乱码问题。在 Windows 上,可以通过在命令行中进入 MySQL 的 `bin...
《MySQL数据库入门》教学设计是一份详尽的教学文档,旨在引导初学者逐步了解并掌握MySQL数据库的基本知识和操作。这份教学设计涵盖了从数据库基础到MySQL的实际应用,包括安装配置、启动登录等多个方面。 课程的...
使用说明: 数据库配置文件 config.php 这里主要配置: 一、连接数据库的参数:MYSQ数据库IP、MYSQ数据库用户名、MYSQ数据库名、MYSQ...支持连接任意一个MYSLQ数据库,只要你的站点或你的游戏是MYSQL数据库就可以使用的
10万单词库sql
"oracle2mysql"工具简化了这一过程,提供了一种有效的方法来实现数据的平滑过渡,但使用时仍需充分了解两个数据库系统的特性和差异,以及迁移工具的具体操作流程,以确保迁移的成功和数据的完整性。
### MySQL无法进行远程连接的解决方法 在使用MySQL数据库时,有时可能会遇到无法从远程主机进行连接的问题。本文将详细探讨这一问题的原因以及提供几种有效的解决策略。 #### 一、问题背景与现象 当你尝试从远程...
数据库课程设计 库存管理 登记入库的药品。 登记出库的药品。 每日检查库存下限,报警。 每日检查过期的药品,报警并做退回销毁处理。 对有问题的药品的退回供应商。记录退回的药品的名称、数量、金额和退货原因等...