我编写了一个 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(使用前将#替换为@)