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

长时间不访问服务器程序,与数据库连接断开,报错(mysql+struts2+hibernate)(求解)

 
阅读更多

项目部署到服务器上,一晚上没访问,第二天点击菜单报错:

 

exception

org.hibernate.exception.JDBCConnectionException: could not execute query


 

 

 

 

 

 

 

 

root cause

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 54,313,344 milliseconds ago. The last packet sent successfully to the server was 54,313,344 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

root cause

java.net.SocketException: Software caused connection abort: socket write error

 

报错原因:

Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。而hibernate获取连接的时候认为连接池里的这个连接还是有效的,所以就拿来使用,这时候就报错了。

在 Mysql控制台下输入 SHOW VARIABLES;
最后一个参数
wait_timeout    28800
如果单位是秒,也就是 8 个小时。
程序最后一次建立连接完毕之后 8 个小时,
Mysql 单方面关闭了这个连接。
但 Hibernate 还在记忆着这个连接基本信息。
程序再次连接的时候,已经不存在了。

 

网上搜罗来的解决方案:

1、

在mysql安装目录下找到my.ini文件中添加超时限制:在该文件最后添加一行:wait_timeout=2880000。这样把之前的超时限制把8小时(28800)扩大为800小时。这样重启了mysql后再在其中输入命令:show global variables like "wait_timeout";查看超时是否已修改为:2880000。重启tomcat(如果已启动),OK。

2.使用hibernate配置c3p0 

 

<property name="driverClass"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="jdbcUrl"> <value>jdbc:oracle:thin:@10.2.28.30:1521:ora92</value> </property> <property name="properties"> <props> <prop key="c3p0.acquire_increment">2</prop> <prop key="c3p0.idle_test_period">200</prop> <prop key="c3p0.timeout">1000</prop> <prop key="c3p0.max_size">100</prop> <prop key="hibernate.c3p0.max_statements">100</prop> <prop key="hibernate.c3p0.min_size">20</prop> <prop key="user">bank</prop> <prop key="password">bank</prop> </props> </property>

 

 

 具体问题还未解决,解决后来完善此文

 

 

 

 

 

 

 

 

 

 注意:

hibernate.c3p0.timeout属性指定多少秒后连接超时,连接池会自动对超时连接进行重查。

hibernate内部自带c3p0的链接jar包,所以,在hbm.cfg.xml里直接配置如下项目即可:

c3p0-native property name hibernate configuration key
c3p0.acquireIncrement hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
c3p0.initialPoolSize not available -- uses minimum size
c3p0.maxIdleTime hibernate.c3p0.timeout
c3p0.maxPoolSize hibernate.c3p0.max_size
c3p0.maxStatements hibernate.c3p0.max_statements
c3p0.minPoolSize hibernate.c3p0.min_size

 但是hibernate内部没有proxml的,所以如果使用此作为数据库链接池,那么就要引入jar包,和单独的pro的配置文件

 

 

 

 

 

 

分享到:
评论

相关推荐

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.docx

    MySQL 的连接池机制可以与 Hibernate 的连接池机制结合使用,以提高应用程序的性能。 知识点10: 应用程序的部署和测试 在部署应用程序时,需要进行充分的测试,以确保应用程序的正确性和可靠性。同时,需要注意...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.pdf

    解决 MySQL+Hibernate 连接空闲8小时自动断开问题 概述: 在使用 MySQL 和 Hibernate 进行数据库持久层开发时,可能会遇到连接空闲8小时自动断开的问题。本文将讨论该问题的解决方案,并对相关的知识点进行详细...

    断开连接脚本+批处理+远程桌面连接+用于远程桌面断开连接后保持GUI桌面

    但是如果手动断开远程桌面连接,远程桌面就会进入无桌面状态,此时RPA程序或GUI自动测试程序就无法正常运行。通过这个脚本可以实现在断开远程桌面连接的同时桌面不会被关闭。每次退出远程桌面时,先运行此脚本,这样...

    mysql++-3.0.9.tar.gz

    MySQL++ 是一个C++接口库,用于连接和操作MySQL数据库管理系统。这个压缩包"mysql++-3.0.9.tar.gz"包含的是MySQL++库的3.0.9版本,适用于Linux、Windows 2005以及其他支持C++编译的平台。这个库提供了丰富的功能,...

    MySQL++ v3.0.9 User Manual

    MySQL++ 的开发始于1998年,旨在提供一种更简单的接口来访问MySQL数据库。随着版本的迭代,MySQL++ 不断地增加了新特性并优化了性能。 #### 二、概述 - **Connection对象**: 连接MySQL服务器的类。提供了连接、...

    一个mysql数据库连接类

    这减少了每次请求时建立新连接的时间,对高并发环境非常有利,但需要注意的是,如果长时间不使用,可能占用服务器资源,所以需要合理管理和控制。 在这个数据库连接类中,用户可以根据其Web应用的需求,选择使用哪...

    hibernate C3P0数据源 连接MySQL数据库

    博文链接:https://wxinpeng.iteye.com/blog/203088

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip

    * 对 连接池中的数据库连接(空间时间长的即调度算法)进行`适当`断开连接 * 共享资源的访问,需要`互斥锁`(生产者消费者问题) ## 单例模式 * `懒汉模式` &gt; 当使用这个类的时候才创建它 &gt; 创建对象时,加锁保证有且仅...

    MySQL++ v3.1.0教程

    在长时间等待数据库响应时,可以通过设置连接超时时间来避免应用程序挂起。MySQL++ 支持在连接字符串中指定超时时间: ```cpp conn.connect("host=localhost;user=root;passwd=password;db=test;connect_timeout=30...

    使用数据库连接池proxool配置mysql数据库

    数据库连接池是应用程序管理数据库连接的一种高效方式,它在应用启动时预创建一定数量的数据库连接,供多个请求共享,避免了频繁地建立和关闭连接,从而提高了数据库操作的性能。Proxool是Apache的一个开源项目,...

    Java jdbc数据库连接池总结

    Java 应用程序访问数据库的基本原理是在 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,即 Java 语言通过 JDBC 技术访问数据库。JDBC 是一种“开放”的方案,它为数据库应用开发人员...

    Qt 多线程连接数据库——数据库连接池

    * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接被复用,不是每次都...

    mysql c库api使用, mysql++ 类库封装/实例

    MySQL是世界上最受欢迎的开源数据库系统之一,而C接口API提供了与MySQL服务器通信的底层方法。在编程中,直接使用C API可以实现高度定制化的数据库操作,但同时也需要处理更多的细节,如错误处理、内存管理等。`...

    qt中mysql超时自动断开连解决方案.txt

    可以直接通过设置来达到重连问题,方法很简单,里面有复现自动断开连接导致不能正常插入数据的方法,是自己没有积分所以才要积分

    c++封装MYSQL数据库连接代码

    在C++编程中,与MySQL数据库进行交互是常见的任务,特别是在开发需要持久化存储的应用程序时。本程序通过封装MYSQL数据库的库函数和头文件,实现了数据库的连接以及执行相关操作的功能。以下是对这一主题的详细说明...

    二维插值+数据库连接+vb+程序

    1. Connection对象:建立和断开应用程序与数据库之间的连接,配置连接字符串(包含数据库类型、服务器地址、数据库名、用户名和密码等信息)。 2. Command对象:执行SQL命令,如SELECT、INSERT、UPDATE和DELETE,...

    Delphi数据库三层连接池

    首先,连接池(Connection Pool)是一种数据库连接管理技术,其核心思想是预先创建并维护一定数量的数据库连接,当应用程序需要时可以从池中获取,使用完毕后再归还到池中,而不是直接关闭。这种机制可以避免频繁...

    测试远程数据库是否连接成功

    如果连接延迟高或经常断开,可能需要优化网络环境或调整数据库服务器的配置。 7. **安全性**:确保所有连接信息的安全性,避免明文存储密码,并使用SSL/TLS等加密技术保障数据传输安全。 8. **监控与日志**:启用...

    QT 支持多客户端链接TCP服务器,外带数据库连接池

    在“QT支持多客户端链接TCP服务器,外带数据库连接池”这个项目中,我们将探讨如何利用QT库构建一个能同时处理多个客户端连接的TCP服务器,并有效地管理数据库连接。 首先,我们要构建TCP服务器,这主要依赖于QT的...

Global site tag (gtag.js) - Google Analytics