先看 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了。希望解决了您的问题。
有用点个关注,手留余香!