java.sql.SQLRecoverableException: 关闭的连接 解决办法

记一次 IOException: 远程主机强迫关闭了一个现有的连接 这篇文章知识点总结还是要写前面的, 直接省时好吧对于response的操作下载文件:java复制代码// 指定文件下载名// 指定长度, 推荐file.length()方法, inputStream.available()方法获取网络流不一定准确在线预览java复制代码// 指定播放格式, 代码中为 mp3播放java复制代码// 可以尝试下述代码, 理由: 2.2版本以上HttpURLConnection跟服务交互采用了"gzip"压缩。 阅读详情
AI摘要

本文介绍了如何通过配置验证查询(validationQuery)来避免数据库连接池中的连接因长时间未使用而失效的问题,适用于Spring+IBatis项目。

程序如果长时间不进行数据库操作,那么数据源中的 Connection 很可能已经断开。其原因有可能是防火墙,或者连接的数据库设置的超时时间。

问题总结:

当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection reset” 或“java.sql.SQLException 关闭的连接”异常。

在配置数据源后面加上

<property name="validationQuery" value="select * from dual"/>

配置后,客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用


程序中采用的是Spring+IBatis,数据源配置如下:在 applicationContext.xml中如下设置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
  <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="1000"/>
        <property name="defaultAutoCommit" value="true"/>
 </bean>


 经过查找资料和分析,得出该问题主要是由于连接时间过长,失效所致,将以上配置修改如下:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
  <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="1000"/>
        <property name="defaultAutoCommit" value="true"/>
        <span style="background-color: rgb(255, 0, 0);"><property name="validationQuery" value="select * from dual"/></span>
 </bean>

顺便提一下数据库DBCP连接池:

在applicationContext.xml中:

<!-- 数据源1 -->  
    <bean id="dataSource"  
          class="org.apache.commons.dbcp.BasicDataSource"  
          destroy-method="close">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
        <property name="url" value="jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=UTF-8"/>  
        <property name="username" value="root"/>  
        <property name="password" value="root"/>  
        <!--maxActive: 最大连接数量-->    
        <property name="maxActive" value="150"/>  
        <!--minIdle: 最小空闲连接-->    
        <property name="minIdle" value="5"/>  
        <!--maxIdle: 最大空闲连接-->    
        <property name="maxIdle" value="20"/>  
        <!--initialSize: 初始化连接-->    
        <property name="initialSize" value="30"/>  
        <!-- 连接被泄露时是否打印 -->  
        <property name="logAbandoned" value="true"/>  
        <!--removeAbandoned: 是否自动回收超时连接-->    
        <property name="removeAbandoned"  value="true"/>  
        <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->    
        <property name="removeAbandonedTimeout" value="10"/>  
        <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒-->  
        <property name="maxWait" value="1000"/>  
        <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->  
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>  
        <!--  在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->  
        <property name="numTestsPerEvictionRun" value="10"/>  
        <!-- 1000 * 60 * 30  连接在池中保持空闲而不被空闲连接回收器线程-->  
        <property name="minEvictableIdleTimeMillis" value="10000"/>  
    <property name="validationQuery" value="SELECT NOW() FROM DUAL"/>  
    </bean>  



c3p0解决:

解决的办法是: 

在 applicationContext.xml中如下设置:

<!-- 数据库连接声明 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="close">

<property name="driverClass" value="com.alibaba.china.jdbc.SimpleDriver" />

<!-- <property name="driverClass" value="oracle.jdbc.OracleDriver" /> -->

<property name="jdbcUrl" value="jdbc:oracle:thin:@202.116.70.180:61166:orcl" />

<!-- 每60秒检查所有连接池中的空闲连接。Default: 0 -->

<property name="idleConnectionTestPeriod" value="60" />

 <!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->

<property name="testConnectionOnCheckin" value="true" />

<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么 属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。Default: null -->

<property name="automaticTestTable" value="Test" />

 

<property name="properties">

<props>

<prop key="clientEncoding">GBK</prop>

<prop key="serverEncoding">CP1252</prop>

<prop key="user">WDS</prop>

<prop key="password">HelloOracle</prop> 

</props>

</property>

</bean>

 

配置项一定要作为 <bean> 的子元素,而不能做为 <properties> 的子元素,否则不起作用。


 

参考:

http://my.oschina.net/tianzimensheng/blog/65225

http://www.cnblogs.com/younes/archive/2012/06/01/2529483.html

http://www.cnblogs.com/safeking/archive/2007/02/01/637067.html


读超时为 10 分钟但是 10 秒就 Socket read timed out 了如何解决 从1.2.12开始 默认超时为10秒。同时也可以使用下面方法。 阅读详情

相关推荐

SQLRecoverableException: 关闭的连接 尝试解决办法

摘要:日志显示Oracle数据库连接关闭异常(SQLRecoverableException),涉及Druid连接池(1.2.8)与ojdbc8驱动(19.3.0.0)的交互问题。建议解决方案:1.确保使用Druid 1.2.*+版本;2.优化连接池配置,包括设置初始连接数(50)、最小空闲(100)、最大活跃连接(300),启用空闲检测(timeBetweenEvictionRunsMillis:60000ms)和泄漏回收(removeAbandoned:true)。问题出现在MyBatis查询过程中,可

m0_59061013的博客 625

已解决java.sql.SQLRecoverableException异常的正确解决方法,亲测有效!!!

已解决java.sql.SQLRecoverableException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 1万+

正确解决java.sql.SQLRecoverableException异常的有效解决方法

正确解决java.sql.SQLRecoverableException异常的有效解决方法

wbajsjhhhhh的博客 3115

java.sql.SQLRecoverableException: 关闭的连接

目录 一.问题 二.问题总结: 三.Spring+IBatis解决方式 五.c3p0解决的办法是: 注意: 扩展: DBCP连接池: 参考: 一.问题 程序如果长时间不进行数据库操作,那么数据源中的 Connection 很可能已经断开。其原因有可能是防火墙,或者连接的数据库设置的超时时间。 二.问题总结: 当数据库连接池中的连接被创建而长时间不使用的情况...

qq_32865713的博客 1万+

20220601超简单百度地图街景图片爬取+绿视率计算

真的不难咯。

weixin_39676904的博客 1万+

java结束sql链接_java.sql.SQLRecoverableException: 关闭的连接 解决办法

程序如果长时间不进行数据库操作,那么数据源中的 Connection 很可能已经断开。其原因有可能是防火墙,或者连接的数据库设置的超时时间。问题总结:当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection...

weixin_26861329的博客 943

【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

Web图书管理系统

激流丶的博客 5393

DRUID连接池:java.sql.SQLRecoverableException: 关闭的语句

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33672400的博客 6644

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4924

大学计算 - 方程求解 实训答案 第3关

【代码】大学计算 - 方程求解 实训答案 第3关。

2403_89314916的博客 106

java 关闭oracle连接_java.sql.SQLRecoverableException:已关闭的连接

我在Oracle 11中使用jboss7.0.2 final.目前我面临一个随机发生的问题.但在重负载期间,此错误跟踪会不断增长.试过这么多方法都不会成功.MyDatasource配置:jdbc:oracle:thin:@10.11.252.200:1521:sportsdboracleDriver175falsefalseFailingConnectionOnlymportalmobile600...

weixin_39747293的博客 2983

SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消

随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配和对账功能允许用户在关账过程中进行早期分析,以避免公司间差异,并缩短关账时的延迟。公司间匹配和对账功能交易级别匹配和实时对账基于各种组织维度(如公司、利润中心和合并单位)的灵活建模自动差异解决。应用内通信和工作流。与公司间抵销集成。

weixin_43853754的博客 4399

java.sql.SQLRecoverableException保持的解决方法,亲测有效,嘿嘿嘿,已解决

`java.sql.SQLRecoverableException` 是 JDBC 中的一个异常,它通常指示了一个可恢复的 SQL 异常。这种异常可能由多种原因引起,但最常见的是与数据库连接有关的问题,比如网络中断、数据库服务器暂时不可用、会话超时等。

PythonAigc的博客 3297

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

技术分享 1713

飞牛fnNAS个人小账本导入微信账单

本文介绍了将微信支付账单导入ezBookkeeping个人记账系统的详细方法。首先通过微信申请导出账单文件,接收后需进行Excel预处理:删除前导行、添加账户和分类列、整理金额格式等。在ezBookkeeping中需预先设置"微信"分类和账户。导入时需注意列映射关系,包括交易时间、账户名称等关键字段的对应设置。文章还提到处理交易标签、格式转换等细节问题,并建议避免使用"修改余额"功能。该方法同样适用于支付宝账单导入,解决了直接导入可能出现的格式不兼容问题。

dgnankai的专栏 482

【Java】已解决java.sql.SQLRecoverableException异常

在Java的数据库编程中,java.sql.SQLRecoverableException是一个重要的异常,它通常表示一个可以恢复的SQL异常。这种异常通常与数据库连接问题、事务管理或网络问题相关。本文将探讨SQLRecoverableException的背景、可能的原因、错误代码示例、正确的解决方案以及编写数据库代码时需要注意的事项。假设我们有一个Java程序,它使用JDBC(Java Database Connectivity)连接到数据库,并执行一些查询操作。

屿小夏.的知识博客 2352

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

wangchaoqi1985的博客 1530

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 关闭语句_java.sql.SQLRecoverableException: 关闭的语句

数据库连接池配置:数据库链接在运行时报错:Caused by: java.sql.SQLRecoverableException: 关闭的语句at oracle.jdbc.driver.OracleClosedStatement.exitImplicitCacheToActive(OracleClosedStatement.java:4667)at oracle.jdbc.driver.Oracl...

weixin_36247891的博客 2207

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java.sql.SQLRecoverableException: Closed Connection问题分析

进一步观察发现,运行到40分钟的时候,数据库服务器上保持不变的端口号消失了,可判断出此时数据库上该连接已经端口。资料显示的根本原因大都是Oracle数据库配置了空闲连接存活时间,超过该时间会被数据库自动关闭,但是经确认数据库上并没有配置该值,不会自动关闭空闲连接。其中clientip为应用服务器ip,同样有10个数据库连接,每2分钟查看一次,同样有9个连接端口号会改变,有1个保持不变。其中pid为进程号,发现有10个数据库连接,每2分钟查看一次,有9个连接端口号会改变,有1个保持不变。

u013577202的博客 875

DataX 报错:java.sql.SQLRecoverableException: IO 错误: Connection reset

DataX 报错:java.sql.SQLRecoverableException: IO 错误: Connection reset ->> https://blog.error.work/big_data/150.html 在使用 DataX 抽取 Oracle 中的数据时,遇到了如下报错: 2021-04-19 14:04:47.207 [0-0-0-reader] ERROR ReaderRunner - Reader runner Received Exceptions: com.ali

王图思睿 5240

C3PO Caused by: java.sql.SQLRecoverableException:关闭的连接

项目背景: 最近的一个项目在使用C3P0的连接池,数据库为Oracle。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:Caused by: java.sql.SQLRecoverableException:关闭的连接。 参考资料: http://blog.csdn.net/majian_1987/article/details/18598589 http://blog.

commonnessPeople的专栏 9573

java.sqlrecoverableexception: io error: the network adapter could not establ

在进行Java开发中,遇到错误时,首先要检查数据库地址和端口是否正确,确认数据库服务器是否已启动,检查网络连接是否正常,以及确认防火墙或安全组设置是否阻止与数据库服务器的连接。通过以上步骤,可以解决大多数由于无法建立数据库连接导致的错误。希望本文对你了解并解决这个错误有。

男神的专栏 3748

java.sql.SQLRecoverableException

jdbc操做数据库  Blob 数据类型时,不能关了  Connection对象,关了之后就报错   java.sql.SQLRecoverableException       Struts Problem Report Struts has detected an unhandled exception: Messages: ????? F...

thinktotings的专栏 517

close connection error java.sql.SQLRecoverableException: IO Error: Broken pipe

java.sql.SQLRecoverableException: IO Error: Broken pipe Table of Contents 1. 错误信息 2. 分析 2.1. 连接池 2.2. TCP网络 2.3. 数据库监听 1 错误信息 ERROR [com.alibaba.druid.util.Jdbc...

weixin_30607029的博客 2051

java 数据可连接失败抛出异常_java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection re...

java.sql.SQLRecoverableException: IO Error: Connection resetatoracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:612)atoracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:5094)...

weixin_28747829的博客 919
上一篇: spring常用注解详情
下一篇: spring定义和装配bean
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值