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,發現項目服務可以正常啟動,問題解決!