为什么 HSQLDialect 初始化在 Spring Boot 项目中需要这么长时间?

2024-04-05

我编写了一个 Spring Boot REST api,它连接到具有大量表的旧版 MySQL 数据库 - 10759。当我启动 Spring Boot 项目时,日志停在一行,表明 HSQLDialect 正在初始化。日志需要几分钟才能恢复工作。

请注意日志消息的时间戳以了解我的意思。再次仅显示表明问题的日志:

2020-04-21 19:10:26.489  INFO 10019 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2020-04-21 19:10:26.699  INFO 10019 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
2020-04-21 19:13:06.068  INFO 10019 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]

旧数据库版本:

innodb_version: 5.6.14
protocol_version: 10
version: 5.6.14-1+debphp.org~precise+1
version_comment: (Ubuntu)
version_compile_machine: x86_64
version_compile_os: debian-linux-gnu

Spring框架版本

2.2.4

我还尝试强制 Hibernate 用户MySQL5Dialect,通过将以下行添加到项目的application.properties file:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

但它不断切换到 HSQLDialect。

我怀疑大量的表格在某种程度上与这个问题有关。我在尝试使用 PHPMyAdmin、DBeaver、MySQL Workbench 等多个 MySQL GUI 工具连接到同一数据库时遇到类似的问题。某些工具无法加载表列表。其他人确实会加载它们,但需要几分钟。

您能解释一下为什么初始化 HSQLDialect 需要这么长时间吗?我该怎么做才能解决这个问题?


我的以下行application.properties文件导致初始化缓慢:

spring.jpa.hibernate.ddl-auto=validate

所以我把它改为

spring.jpa.hibernate.ddl-auto=none

由于我在数据库中使用的表很大,例如数千个,Hibernate 必须根据数据库的表信息检查每个实体声明的有效性。由于我更改了这个值,初始化时间下降到不到一秒,因为 Hibernate 已经跳过了验证部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 HSQLDialect 初始化在 Spring Boot 项目中需要这么长时间? 的相关文章

随机推荐