gpt4 book ai didi

java - Docker MySQL 在超时 : No operations allowed after connection closed 后删除表

转载 作者:行者123 更新时间:2023-12-03 23:01:38 26 4
gpt4 key购买 nike

一个非常奇怪的情况。我正在将 Spring Boot 与在 docker 容器中运行的 Spring Data JPA 和 MySQL 一起使用。启动应用程序后一切正常(数据库在启动时初始化 spring.jpa.hibernate.ddl-auto=create-drop )。
如果我让应用运行,大约 10 分钟后,在运行另一个请求时,我会返回 table doesn't exist .检查数据库,我可以看到所有表都消失了(模式仍然存在)!
日志在错误之前向我显示此警告:

2020-12-20 16:15:41.151  WARN 11018 --- [nio-8080-exec-4] com.zaxxer.hikari.pool.PoolBase          : myDS - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@67dd33b2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2020-12-20 16:15:41.153 WARN 11018 --- [nio-8080-exec-4] com.zaxxer.hikari.pool.PoolBase : myDS - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3817c06d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2020-12-20 16:15:41.155 WARN 11018 --- [nio-8080-exec-4] com.zaxxer.hikari.pool.PoolBase : myDS - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@536cd1b2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
进而:
2020-12-20 16:15:41.161  WARN 11018 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1146, SQLState: 42S02
2020-12-20 16:15:41.161 ERROR 11018 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : Table 'tasker.account' doesn't exist
2020-12-20 16:15:41.173 INFO 11018 --- [nio-8080-exec-4] o.h.e.internal.DefaultLoadEventListener : HHH000327: Error performing load command
我还在 application.properties 中添加了这个设置: spring.datasource.hikari.max-lifetime=600000匹配mysql的设置。
Docker 以以下方式启动: docker run --name=mysql1 --restart on-failure -d mysql/mysql-server:8.0 注意:这永远不会发生在 mysql 的本地实例(本地,不在 docker 中)
任何帮助,将不胜感激。

最佳答案

create-drop将在关闭 SessionFactory 时删除架构,现在让我们处理 SessionFactory 关闭的部分,它可能与网络连接超时有关,导致 SessionFactory 被 springboot 自动关闭。
您可以向 application.properties 添加心跳以防止发生这种行为,无论如何这部分已经解决了我的生产环境中的许多问题,因此添加这一点非常有帮助:

#HeartBeat the database so that connections don't die otherwise the connections die silently
#and when a query commes along the JPA will throw an error and keep throwing errors and a restart of the process
#is inevitable
spring.datasource.testWhileIdle=true
spring.datasource.test-on-borrow=true
spring.datasource.validationQuery=SELECT 1

我将在此处提供有关检查连接和池健康状况的答案的链接 Connection to Db dies after >4<24 in spring-boot jpa hibernate
另一件事,因为这只是一个开发环境,您可以更改 create-dropcreate它将 springboot 配置为删除现有架构并在 springboot 应用程序启动时创建一个新架构,这样当连接丢失时架构永远不会被破坏。

关于java - Docker MySQL 在超时 : No operations allowed after connection closed 后删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65382078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com