【JEECGBOOT 3】连接池druid报错The last packet successfully received from the server was XX milliseconds ago

一、场景

二、问题

三、原因

四、解决方案

五、实战

▶  mysql 连接超时时间

▶  mysql 数据库设置

>  先查询 mysql 超时时间 :

>  方式一:docker-compose.yaml 安装数据库时,使用 command (推荐)

>  方式二:修改 my.cnf(/etc/my.cnf 文件所在位置)

▶  java 中 mysql 连接设置

六、效果


一、场景

  • IDEA 2021

  • JEECG BOOT 3.6

  • MYSQL 5.7

  • Spring boot 2.7.10

二、问题

启动报错

The last packet successfully received from the server was 11,012 milliseconds ago. The last packet sent successfully to the server was 11,012 milliseconds ago.

三、原因

        MySQL连接已经超时了,即长时间没有收到新的查询请求。连接处于空闲状态而被MySQL服务器关闭。

 

四、解决方案

你可以尝试使用以下方法来解决这个问题:

  • 检查数据库服务器和应用服务器之间的网络连接是否正常,特别是在高延迟或不稳定的网络环境下。

  • 增加数据库连接的超时时间,这可以通过在JDBC URL中添加"autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000"参数实现(具体数值可以根据实际情况调整)。

  • 使用 数据库连接池来管理连接,可以更好地控制连接的超时时间和重连逻辑。

  • 检查数据库是否已满,如果数据库已经使用了大量的系统资源,那么此时数据库的性能可能很低,以至于无法响应新的查询请求。

五、实战

▶  mysql 连接超时时间

        分 mysql 数据库设置 + java中mysql连接设置

▶  mysql 数据库设置

>  先查询 mysql 超时时间 :
show variables like '%timeout%';

 

>  方式一:docker-compose.yaml 安装数据库时,使用 command (推荐)
  • 重新构建数据库即可:执行 docker-compose up -d --build
  mysql:
    image: mysql:5.7.28
    container_name: mysql
    ports:
      - 3306:3306
    restart: always
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: jeecg123456
    command:
      --connect_timeout=60
      --max_connections=16000
      --max_user_connections=2000
      --interactive_timeout=1200000
      --wait_timeout=1200000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
      --lower_case_table_names=1
    volumes: 
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/mysql/my.cnf
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 500M
>  方式二:修改 my.cnf/etc/my.cnf 文件所在位置)
  • mysql 5 以上的版本修改 my.cnf 找到[mysqld]后面加上如下两行代码
wait_timeout=1200000
interactive_timeout=1200000

  • 重启mysql服务在次执行show variables like ‘%timeout%’;命令查看wait_timeout连接等待时间

▶  java 中 mysql 连接设置

>  连接mysql url添加参数 

&keepAlive=true&autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000

 

六、效果

  • 由之前11秒没有触发连接查询,到现在延长至687秒(约11.2分钟)

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ladymorgana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值