前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot 报 No operations allowed after connection closed 异常解决办法

SpringBoot 报 No operations allowed after connection closed 异常解决办法

作者头像
Demo_Null
发布于 2020-09-28 06:34:22
发布于 2020-09-28 06:34:22
16.2K00
代码可运行
举报
文章被收录于专栏:Java 学习Java 学习
运行总次数:0
代码可运行

1.1 异常原因

  MySQL 5.0 以后针对超长时间数据库连接做了一个处理,即一个数据库连接在无任何操作情况下过了 8 个小时后(MySQL 服务器默认的超时时间是 8 小时),MySQL 会自动把这个连接关闭。在数据库连接池中的 connections 如果空闲超过 8 小时,MySQL 将其断开,而数据库连接池并不知道该 connection 已经失效,这个时候你请求数据库链接,连接池会将失效的 connection 给你,so~,SpringBoot 温柔的告诉你 No operations allowed after connection closed。SpringBoot 2.0 以上版本,mysql-connector-java 默认使用的是 8.0 以上版本。

1.2 解决办法

1.2.1 hikari 数据库连接池配置

☞ 概述   SpringBoot 2.0 开始推 HikariCP,将默认的数据库连接池从 tomcat jdbc pool 改为了 hikari,HikariCP 在性能和并发方面确实表现不俗(号称最快的连接池)。使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa,会自动添加对 HikariCP 的依赖,也就是说此时使用 HikariCP。通过在 application.properties 或 application.yml 中配置 spring.datasource.type 指定数据库连接池,强制使用其它的连接池技术。

☞ 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  datasource:
    hikari:
      # 连接池最大连接数,默认是 10
      maximum-pool-size: 60
      # 链接超时时间,默认 30000(30)
      connection-timeout: 60000
      # 空闲连接存活最大时间,默认 600000(10 分钟)
      idle-timeout: 60000
      # 连接将被测试活动的最大时间量
      validation-timeout: 3000
      # 此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000(30 分钟)
      max-lifetime: 60000
      # 连接到数据库时等待的最长时间()
      login-timeout: 5
      # 池中维护的最小空闲连接数
      minimum-idle: 10

☞ 配置说明

name

描述

默认值

autoCommit

自动提交从池中返回的连接

true

connectionTimeout

等待来自池的连接的最大毫秒数

30000 ms

idleTimeout

连接允许在池中闲置的最长时间

600000 ms

maxLifetime

池中连接最长生命周期

1800000 ms

connectionTestQuery

如果您的驱动程序支持 JDBC 4,我们强烈建议您不要设置此属性

null

minimumIdle

池中维护的最小空闲连接数

-1

maximumPoolSize

池中最大连接数,包括闲置和使用中的连接

-1

metricRegistry

该属性允许您指定一个 Codahale / Dropwizard MetricRegistry 的实例,供池使用以记录各种指标

null

healthCheckRegistry

该属性允许您指定池使用的 Codahale / Dropwizard HealthCheckRegistry 的实例来报告当前健康信息

null

poolName

连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中以识别池和池配置

null

initializationFailTimeout

如果池无法成功初始化连接,则此属性控制池是否将 fail

fast

isolateInternalQueries

是否在其自己的事务中隔离内部池查询,例如连接活动测试

false

allowPoolSuspension

控制池是否可以通过 JMX 暂停和恢复

false

readOnly

从池中获取的连接是否默认处于只读模式

false

registerMbeans

是否注册 JMX 管理 Bean(MBeans)

false

catalog

为支持 catalog 概念的数据库设置默认 catalog

driver default

connectionInitSql

该属性设置一个 SQL 语句,在将每个新连接创建后,将其添加到池中之前执行该语句。

null

driverClassName

HikariCP 将尝试通过仅基于 jdbcUrl的DriverManager 解析驱动程序,但对于一些较旧的驱动程序,还必须指定 driverClassName

null

transactionIsolation

控制从池返回的连接的默认事务隔离级别

null

validationTimeout

连接将被测试活动的最大时间量

5000 ms

leakDetectionThreshold

记录消息之前连接可能离开池的时间量,表示可能的连接泄漏

0

dataSource

这个属性允许你直接设置数据源的实例被池包装,而不是让 HikariCP 通过反射来构造它

null

schema

该属性为支持模式概念的数据库设置默认模式

driver default

threadFactory

此属性允许您设置将用于创建池使用的所有线程的 java.util.concurrent.ThreadFactory 的实例。

null

scheduledExecutor

此属性允许您设置将用于各种内部计划任务的 java.util.concurrent.ScheduledExecutorService 实例

null

1.2.2 Druid 数据库连接池配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  datasource:
  druid:
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
      initial-size: 10
      # 连接池中最小连接数量
      min-idle: 10
      # 连接池用最大连接数量
      maxActive: 20
      # 获取连接时最大等待时间,单位毫秒。
      maxWait: 60000
      # 关闭空闲连接的检测时间间隔 Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于则关闭物理连接。
      timeBetweenEvictionRunsMillis: 60000
      # 连接的最小生存时间,连接保持空闲而不被驱逐的最小时间
      minEvictableIdleTimeMillis: 300000
      # 验证数据库服务可用性的 sql,用来检测连接是否有效的 sql。oracle 应该写成 SELECT 1 FROM DUAL 
      validationQuery: SELECT 1 FROM DUAL
      # 申请连接时检测空闲时间,根据空闲时间再检测连接是否有效,建议配置为 true,不影响性能,并且保证安全性。
      testWhileIdle: true
      # 申请连接时直接检测连接是否有效,申请连接时执行 validationQuery 检测连接是否有效,开启会降低性能。
      testOnBorrow: false
      # 归还连接时检测连接是否有效,归还连接时执行 validationQuery 检测连接是否有效,开启会降低性能。
      testOnReturn: false
      # 开启 PSCache
      poolPreparedStatements: true
      # 设置 PSCache 的值
      maxPoolPreparedStatementPerConnectionSize: 20
      # 连接出错后再尝试连接三次
      connectionErrorRetryAttempts: 3
      # 数据库服务宕机自动重连机制
      breakAfterAcquireFailure: true
      # 连接出错后重试时间间隔
      timeBetweenConnectErrorMillis: 300000
      # 异步初始化策略
      asyncInit: true
      # 是否自动回收超时连接
      remove-abandoned: true
      # 超时时间()
      remove-abandoned-timeout: 1800
      # 事务超时时间
      transaction-query-timeout: 6000
      # 配置监控统计拦截的 filters,去掉后监控界面 sql 无法统计,wall 用于防火墙
      filters: stat,wall,log4j2
      # 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      # 配置 DruidStatFilter
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      # 配置 DruidStatViewServlet
      stat-view-servlet:
        url-pattern: /druid/*
        # IP 白名单,没有配置或者为空,则允许所有访问
        allow: 127.0.0.1
        # IP 黑名单,若白名单也存在,则优先使用
        deny: 192.168.31.253
        # 禁用 HTML 中 Reset All 按钮
        reset-enable: false
        # 登录用户名 / 密码
        login-username: root
        login-password: 123
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot 中 HikariCP 的相关配置
通常,可以在application.yml中对数据源进行相应的配置,从性能方面来讲,数据库连接池的优先级为:HikariCP > druid > tomcat-jdbc > dbcp > c3p0 。自 SpringBoot 2.0 起,默认的数据库连接池便是 HikariCP,在 pom 文件中引入spring-boot-starter-parent后便无需再引入 HikariCP 的依赖。 对于 HikariCP 的配置,主要可以从两个方面获取: 1. SpringBoot官方参考文档 2. HikariCP的github发布页 为了便于日后可能的查询,在此记录下详细的配置信息。
京剧猫
2023/03/04
3K0
数据库链接池
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。 连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
鱼找水需要时间
2023/03/15
2.3K0
数据库链接池
Hikari链接池
Hikari是一款非常强大,高效,并且号称“史上最快连接池”。并且在springboot2.0之后,采用的默认数据库连接池就是Hikari。
用户10325771
2023/03/01
9100
玩转 Spring Boot 集成篇(MySQL、Druid、HikariCP)
Spring Boot 横扫 Java 程序员在使用 Spring 研发路上的诸多障碍,让研发人员更加专注于业务逻辑的开发,使得企业级项目开发更加快速和高效。
一猿小讲
2022/02/25
5.7K0
玩转 Spring Boot 集成篇(MySQL、Druid、HikariCP)
Springboot+druid数据库连接池使用「建议收藏」
使用数据库连接池主要考虑到程序与数据库建立连接的性能。创建一个新的数据库是一个很耗时的过程,在使用完之后,可能还需要不断的释放建立的连接,对资源的损耗大。
全栈程序员站长
2022/09/29
1.2K0
Springboot+druid数据库连接池使用「建议收藏」
芋道 Spring Boot 数据库连接池入门
在我们的项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是
芋道源码
2020/04/21
1.8K0
芋道 Spring Boot 数据库连接池入门
Spring Boot 3 集成 Druid 连接池详解
在现代的Java应用中,使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源,集成Druid连接池,以实现更高效的数据库连接管理。
修己xj
2023/12/13
1.4K0
Spring Boot 3 集成 Druid 连接池详解
Java中数据库连接池
今天继续Java的课题,两天没有做任何事情,过了个自在的周末,但是不知道为什么总是有点淡淡的忧桑。
香菜聊游戏
2021/06/07
9810
Java中数据库连接池
SpringBoot整合Druid「建议收藏」
Github地址:https://github.com/alibaba/druid/ com.alibaba.druid.pool.DruidDataSource 基本配置参数 如下:
全栈程序员站长
2022/09/15
7120
SpringBoot 监控 SQL 运行情况?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/12
1.2K0
SpringBoot 监控 SQL 运行情况?
自定义HikariCP连接池
官方解释: 快速、简单、可靠。HikariCP 是一个“零开销”的生产就绪 JDBC 连接池。大约 130Kb,库非常轻。
ha_lydms
2023/08/10
2.2K0
自定义HikariCP连接池
SpringBoot实现对HikariCP连接池的整合
池化思想是我们项目开发过程中的一种非常重要的思想,如整数池,字符串池,对象池、连接池、线程池等都是池化思想的一种应用,都是通过复用对象,以减少因创建和释放对象所带来的资源消耗,进而来提升系统性能。例如Integer对象的内部池应用,代码如下:
用户5546570
2021/02/22
2.1K0
SpringBoot实现对HikariCP连接池的整合
SpringBoot 监控 SQL 运行情况?
虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能,也是阿里巴巴的开源项目。 Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。 Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。 Spring Boot 默认数据源 HikariDataSource 与 JdbcTem
IT大咖说
2022/05/12
8880
SpringBoot 监控 SQL 运行情况?
Spring Boot 数据库连接池参数
Spring Boot 默认选择 Tomcat JDBC Pool 作为数据库连接池。Tomcat(8) 连接池常用的属性:
Dylan Liu
2019/07/01
2.5K0
SpringBoot | SpringBoot整合数据库
可以看到:默认数据源为 class com.zaxxer.hikari.HikariDataSource
啵啵鱼
2022/11/23
8920
SpringBoot | SpringBoot整合数据库
spring boot 结合 Druid
Druid 是 Java 语言中最好的数据库连接池。能够提供强大的监控和扩展功能。
Jimmy_is_jimmy
2023/10/16
2520
spring boot 结合 Druid
云数据库MySql故障切换下的应用重连配置最佳实践
云数据库 MySQL 支持单节点、双节点、三节点、集群版等架构,配合多可用区部署,可为用户业务提供高可用性支持,保证用户可以快速恢复数据库操作而无需管理干预,如出现可用区中断、主数据库实例故障(主实例因负载过高 hang 住、硬件故障等),数据库可以自动处理故障转移(实例切换),即主数据库实例(节点)会自动切换到备可用区的备用副本。日常的数据库运维过程中,数据库实例规格调整、数据库引擎版本升级等操作,也会可能涉及到实例切换。
云顾问-为您服务
2024/05/03
9360
Spring Boot 2.x 自定义数据源 DruidDataSource(操作 mysql 数据库)「建议收藏」
1、Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP、PROXOOL 等 DB 池的优点,同时加入了日志监控
全栈程序员站长
2022/06/28
1.3K0
Spring Boot 2.x 自定义数据源 DruidDataSource(操作 mysql 数据库)「建议收藏」
Spring Boot 整合Druid
等待maven自动导入后,我们在External Libraries这里能看到这个Druid的全部源码
LCyee
2020/08/05
1.7K0
Spring Boot 整合Druid
c3p0,DBPC,Druid三大连接池的区别/性能【面试+工作】
先来点实用的: <!-- 配置dbcp数据源 --> <bean id="dataSource2" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/
Java帮帮
2018/12/07
1.7K0
推荐阅读
相关推荐
SpringBoot 中 HikariCP 的相关配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验