MySQL时区问题Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Con

   日期:2020-09-27     浏览:917    评论:0    
核心提示:先看 IDEA 报错,这个问题是 Mysql 数据库的时区和系统的不一致 导致的:(您要是不是以下报错就可以不看下面了)背景介绍:今天一个小伙伴问我为什么她 spring boot 整合 Mybaits 检查了 持久层、配置文件、数据库、mybatis 依赖都没有问题,一涉及到操作数据库就一直报这个时区的错误,还说 JDBC 和数据源有问题,于是我就演示一下她的错误,也算是一种记录!毕竟以前我也遇到过这个问题:解决:这是 MySQL 高版本数据库配置的时区与你系统的时区不一致所致,只需要把两者的时区设

先看 IDEA 报错,这个问题是 Mysql 数据库的时区和系统的不一致 导致的:(您要是不是以下报错就可以不看下面了)

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: 
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '�й���׼ʱ��' 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.
### The error may exist in com/dai/cache/mapper/EmployeeMapper.java (best guess)
### The error may involve com.dai.cache.mapper.EmployeeMapper.getEmpByID
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; 
nested exception is java.sql.SQLException: The server time zone value '�й���׼ʱ��' 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 boot 整合 Mybaits 检查了 持久层、配置文件、数据库、mybatis 依赖都没有问题,一涉及到操作数据库就一直报这个时区的错误,还说 JDBC 和数据源有问题,于是我就演示一下她的错误,也算是一种记录!毕竟以前我也遇到过这个问题:

产生原因MySQL 高版本数据库配置的时区与你系统的时区不一致所致,只需要把两者的时区设置一致即可。根据我的经验这好像只会在 spring boot 集成中才会出现错误,这一点没有验证。

两种解决方法: 一是在代码层面去设置 application.properties/yml 配置文件;
                          二是修改MySQL数据库的 my.ini 配置文件。我演示时使用的是 MySQL 5.7 版本。

1、方法一:在 application.properties/yml 配置文件中的 spring.datasource.url=jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&characterEncoding=utf-8 (本地开发阶段推荐此方法)

spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=UTC&characterEncoding=utf-8

2、方法二:这种是直接修改你MySQL数据库的配置文件,在配置文件里写死 MySQL 使用中国的时区。
       在MySQL的 my.ini 配置文件中添加 java default-time-zone='+08:00' 到 [mysqld]下。

default-time-zone='+08:00'



添加之后,保存,重启MySQL,重新连接数据库。运行程序。(这一流程必须做)

以上两种方法都是可以的,我演示的是 MySQL 5.7 版本,使用哪一种方法看你就自己了。
但是使用第一种方法的话,是不需要重启 MySQL 服务的,也不需要重新连接数据库服务。

另外在说一下,mysql 依赖的版本最好不写(spring boot 项目中),让 spring boot 通过 spring-boot-starter-parent 这个父启动器自适应。有人说这个时区问题可以通过降低 MySQL 数据库或者MySQL依赖的版本去解决,您觉得合适吗,为了解决高版本带来的这个问题去使用之前的数据库。而且经过我的验证降低MySQL依赖版本的做法并不靠谱。所以建议就使用以上两种方法解决时区问题就ok了。希望解决了您的问题。

有用点个关注,手留余香!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服