The server time zone value 'EDT' is unrecognized or represents more than one time zone.
由于数据库和系统时区差异所造成的
首先想到的是看看连接数据库的url有没有问题:jdbc:mysql://xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8
解决方案:
在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8,否则会被解析为空。再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。
例如:
url=jdbc:mysql://localhost:3306/bbs?useUnicode=true$characterEncoding=utf8
改为
url=jdbc:mysql://localhost:3306/bbs?serverTimezone=UTC
没问题,而且在开发环境url是可以正常使用的。
在网上查了一些资料说是可能数据库时间与数据库所在服务器时间不一致导致,但是看了下两者时间是一致的,问题一直没有解决,可以确定的是跟数据库所在服务器的时区有关,最后顺这个思路去查找相关更换服务器时区的资料。
最后比较开发环境与测试环境的数据库服务器时区,发现开发环境是CST,测试环境是EDT:
服务器上直接数据date命令就可以看到时区,数据库里我们是在navicate中使用show variables like '%time_zone%'查看数据库时区。
于是更换测试环境时区:首先cat /etc/sysconfig/clock文件,发现这是美国时间,根据注释发现在/etc/localtime文件是定义时区的文件,备份并删除/etc/locatime文件,然后根据网上资料找到/usr/share/zoneinfo/发现这里都是各个时区的文件,复制上海时区文件到/etc/下并重命名为localtime:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
使用date查看时间发现时区变为CST,使用date -R查看系统时间,Thu,27 Sep 2018 08:48:24 +0800(说明是东八区,中国时区即为东八区)
然后重启MySQL服务:service mysqld restart,发现项目服务可以正常启动,问题解决!