D B:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.27, for osx10.10 (x86_64) using EditLine wrapper
Spring Boot:2.1.1.RELEASE
错误:
2019-01-01 15:56:25.849 ERROR 39957 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
> :bootRun
java.sql.SQLException: The server time zone value 'AEDT' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
我的属性文件的相关部分:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC
spring.datasource.username=#####
spring.datasource.password=########
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
我对此感到奇怪的是,该错误表明正在使用它的时区 AEDT,但我在 spring.datasource.url
中指定了 UTC。 Hikari 在初始化时是否读取了其他内容?
看起来很像 Hikari 忽略了数据库 url 中的服务器时区设置,而是使用我自己的机器的时区,恰好是“AEDT”(澳大利亚墨尔本)——这是不受欢迎的行为。我希望 Hikari 忽略我自己机器的时区。有谁知道如何让它做到这一点?
原文由 Michael Coxon 发布,翻译遵循 CC BY-SA 4.0 许可协议
感谢您的回答,但我已经找到了解决方案。
正如我所怀疑的那样,Hikari 忽略了您在数据源 URL 中输入的任何内容(对不起,伙计们,您在其中插入的内容并不重要),本质上,它从 MySQL 本身读取时区设置,即,无论您在发布时看到的结果如何命令:
在 MySQL 中。在我的情况下,结果是“SYSTEM”,这是我设置的本地机器。这是 AEDT,MySQL 驱动程序不支持它,因此是我的例外。
在 AWS 中运行相同的查询会产生值“UTC”,这是受支持的(实际上是我想要的)。
因此,我必须在本地 MySQL 服务器中设置时区。
首先,我必须将可用时区从我的主机(Mac OS X)加载到 MySQL 中。我必须找出 zoneinfo 文件在哪里(在我的例子中是
/usr/share/zoneinfo
)然后找出 `mysql_tzinfo_to_sql’ 实用程序在哪里(MySQL 安装的 bin 目录)并使用它来加载我的本地机器的支持时区。在 Mac OS X 中,我最终运行了以下命令:然后在 MySQL 中我可以运行命令:
这 是 一个有效的时区,并与基于云的实例同步。
我认为对于很多使用带有 Spring Boot 的 MySQL 的人来说,这是一个真正的陷阱。它可以在人们处于受支持的时区时工作,但是如果您的开发机器应该切换到不受支持的时区,它会非常神秘地中断,我很惊讶它没有在任何地方记录。 MySQL Connector/J 的源代码很明显,但你不会知道。
也许是因为 MySQL 是 5 年前的事了,而我是一个古老的化石,而且,好吧,离开我的草坪吧!