项目部署到服务器上,一晚上没访问,第二天点击菜单报错:
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 |
|
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 的连接池机制结合使用,以提高应用程序的性能。 知识点10: 应用程序的部署和测试 在部署应用程序时,需要进行充分的测试,以确保应用程序的正确性和可靠性。同时,需要注意...
解决 MySQL+Hibernate 连接空闲8小时自动断开问题 概述: 在使用 MySQL 和 Hibernate 进行数据库持久层开发时,可能会遇到连接空闲8小时自动断开的问题。本文将讨论该问题的解决方案,并对相关的知识点进行详细...
但是如果手动断开远程桌面连接,远程桌面就会进入无桌面状态,此时RPA程序或GUI自动测试程序就无法正常运行。通过这个脚本可以实现在断开远程桌面连接的同时桌面不会被关闭。每次退出远程桌面时,先运行此脚本,这样...
MySQL++ 是一个C++接口库,用于连接和操作MySQL数据库管理系统。这个压缩包"mysql++-3.0.9.tar.gz"包含的是MySQL++库的3.0.9版本,适用于Linux、Windows 2005以及其他支持C++编译的平台。这个库提供了丰富的功能,...
MySQL++ 的开发始于1998年,旨在提供一种更简单的接口来访问MySQL数据库。随着版本的迭代,MySQL++ 不断地增加了新特性并优化了性能。 #### 二、概述 - **Connection对象**: 连接MySQL服务器的类。提供了连接、...
这减少了每次请求时建立新连接的时间,对高并发环境非常有利,但需要注意的是,如果长时间不使用,可能占用服务器资源,所以需要合理管理和控制。 在这个数据库连接类中,用户可以根据其Web应用的需求,选择使用哪...
博文链接:https://wxinpeng.iteye.com/blog/203088
* 对 连接池中的数据库连接(空间时间长的即调度算法)进行`适当`断开连接 * 共享资源的访问,需要`互斥锁`(生产者消费者问题) ## 单例模式 * `懒汉模式` > 当使用这个类的时候才创建它 > 创建对象时,加锁保证有且仅...
在长时间等待数据库响应时,可以通过设置连接超时时间来避免应用程序挂起。MySQL++ 支持在连接字符串中指定超时时间: ```cpp conn.connect("host=localhost;user=root;passwd=password;db=test;connect_timeout=30...
数据库连接池是应用程序管理数据库连接的一种高效方式,它在应用启动时预创建一定数量的数据库连接,供多个请求共享,避免了频繁地建立和关闭连接,从而提高了数据库操作的性能。Proxool是Apache的一个开源项目,...
Java 应用程序访问数据库的基本原理是在 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,即 Java 语言通过 JDBC 技术访问数据库。JDBC 是一种“开放”的方案,它为数据库应用开发人员...
* 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接被复用,不是每次都...
MySQL是世界上最受欢迎的开源数据库系统之一,而C接口API提供了与MySQL服务器通信的底层方法。在编程中,直接使用C API可以实现高度定制化的数据库操作,但同时也需要处理更多的细节,如错误处理、内存管理等。`...
可以直接通过设置来达到重连问题,方法很简单,里面有复现自动断开连接导致不能正常插入数据的方法,是自己没有积分所以才要积分
在C++编程中,与MySQL数据库进行交互是常见的任务,特别是在开发需要持久化存储的应用程序时。本程序通过封装MYSQL数据库的库函数和头文件,实现了数据库的连接以及执行相关操作的功能。以下是对这一主题的详细说明...
1. Connection对象:建立和断开应用程序与数据库之间的连接,配置连接字符串(包含数据库类型、服务器地址、数据库名、用户名和密码等信息)。 2. Command对象:执行SQL命令,如SELECT、INSERT、UPDATE和DELETE,...
首先,连接池(Connection Pool)是一种数据库连接管理技术,其核心思想是预先创建并维护一定数量的数据库连接,当应用程序需要时可以从池中获取,使用完毕后再归还到池中,而不是直接关闭。这种机制可以避免频繁...
如果连接延迟高或经常断开,可能需要优化网络环境或调整数据库服务器的配置。 7. **安全性**:确保所有连接信息的安全性,避免明文存储密码,并使用SSL/TLS等加密技术保障数据传输安全。 8. **监控与日志**:启用...
在“QT支持多客户端链接TCP服务器,外带数据库连接池”这个项目中,我们将探讨如何利用QT库构建一个能同时处理多个客户端连接的TCP服务器,并有效地管理数据库连接。 首先,我们要构建TCP服务器,这主要依赖于QT的...