我使用struts2+Hibernate开发了个j2ee小系统,数据库用的是mysql5,部署的服务器为weblogic10;
一般情况下没有什么问题,在开发中也是偶然发现,我的电脑没有关,部署的服务器一直运行着,长时间没有使用,第二天一来再点击系统,则后台出现如下异常:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: socket write error
STACKTRACE:
java.net.SocketException: Software caused connection abort: socket write error
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:2631)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1548)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1659)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1143)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1256)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
.......
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
在重启服务器后,一切又正常运行。
从以上异常可以看出,是weblogic服务器与mysql数据库服务器之间已失去连接。
原因是:MySQL wait timeout的值默认是28800 (3600*8),即一个连接在8小时内没有活动,就会自动断开该连接。
即使手动去设置wait timeout,最多只能是32767,不能再大了。
由于问题产生的根本原因在于服务到数据库的连接长时间没活动,那么接下来就是想法法来解决它:反空闲:
我使用的是c3po连接池, 配置c3p0的反空闲设置idle_test_period,只要小于MySQL的wait timeout即可.
hibernate.cfg.xml文件中加入的连接池的配置如下:
<!-- 为解决长时间不用连接异常,这是主要的 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size">30</property>
<!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">1800</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">50</property>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
分享到:
相关推荐
- 当客户端尝试通过`getInputStream().read()`方法读取服务端的响应数据时,如果服务端端口已经关闭或连接已被中断,Java会抛出“Software caused connection abort: recv failed”异常。 - 此类异常多发生在非阻塞...
我真的佛了,我把电脑都重装系统了,没想到还是有问题,最终我找到了解决方案。 (我指的重装系统就是win10自带的功能,可能...Network error: Software caused connection abort 原创文章 6获赞 8访问量 726 关注
解决TestNG单元测试报错Software caused connection abort: socket write error
选择哪种连接方式取决于应用场景,如高频率小数据量交互适合短连接,持续稳定的数据传输则适合长连接。 2. **长连接的维护** 对于长连接,需要定期检测连接状态,例如通过“心跳”机制发送和接收数据,以确认对方...
连接服务器失败(错误原因:Connection refused) error 111 抓包结果
3. 网络故障,包括侦听器故障、网络接口卡故障和路由问题,可通过配置备份侦听器、使用冗余网络接口卡和备份网络连接来缓解。 4. 用户错误,如误删或修改数据,可以利用回滚操作或闪回查询来恢复。 5. 介质故障,...
Caused by: java.net.UnknownHostException: openapi.alipay.com
NavicatPremium 最新版下载安装文件,解决ssl连接失败问题
### 错误解析:Caused by: android.system.ErrnoException: write failed: ENOSPC (No space left 在Android开发过程中,可能会遇到“Caused by: android.system.ErrnoException: write failed: ENOSPC (No space ...
本文讨论了 Nginx 访问慢和 accept() failed 错误的解决方案,包括临时修改 ulimit 值、永久修改 ulimit 值、修改 nginx.conf 文件、影响 MySQL 并发连接数等方法。通过这些方法,可以解决 Nginx 连接过多的问题,...
专题资料
"MongoDB 安装出错解决方法" MongoDB 是一款非常流行的 NoSQL 数据库管理系统,但是在安装过程中经常会遇到各种错误,特别是在自定义安装路径时。下面我们将详细介绍 MongoDB 安装出错解决方法。...
Hibernate Session 绑定线程解决方案 在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,...
在Java应用程序运行过程中,"java.lang.OutOfMemoryError: PermGen space"错误是常见的一个问题,尤其是在使用Tomcat这样的Java应用服务器时。这个错误表明应用程序在 PermGen 区域(Permanent Generation)耗尽了...
主要介绍了java.net.ConnectException: Connection refused问题解决办法的相关资料,需要的朋友可以参考下
在示例错误信息中提到的“Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'last_insert_id' 不是可以识别的函数名”,这是由于`last_insert_id`函数在SQL Server中并不...
Android Caused by: java.lang.ClassNotFoundException解决办法 出现问题: 08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: Java.lang.ClassNotFoundException:XXXXX in loader dalvik.system....
* Connection reset by peer:Connection reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器端之间的连接断开后,导致连接的一端继续发送数据,引发该异常。 实践经验 通过实践经验,我们可以...
问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...