【发布时间】:2021-03-30 14:03:26
【问题描述】:
一个非常奇怪的情况。我正在使用 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 中)
任何帮助将不胜感激。
【问题讨论】:
-
添加此设置似乎已经解决了问题:
spring.datasource.hikari.max-lifetime=100000而与 mySQL 值完全匹配的spring.datasource.hikari.max-lifetime=600000不起作用。因此它是这个问题和create-drop的结合。 -
你的连接类型是什么?
-
@Perimosh 连接类型?不知道你到底是什么意思,但它是 jdbc url:
spring.datasource.url=jdbc:mysql://172.17.0.2:3306/tasker?useUnicode=yes&characterEncoding=UTF-8 -
是嵌入的吗?如果是,是 hsqldb、h2 还是 derby?
-
@Perimosh 它是
mysql在 docker 上运行,如问题中所述。它不是 hsqldb、h2 或 derby。
标签: java mysql spring-boot docker spring-data-jpa