我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「 陈皮的JavaLib」第一时间阅读最新文章,回复【 资料】,即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板。
问题现象
Java 项目启动连接 MySQL 数据库报错,报错信息如下:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
### The error may exist in phase01/UserMapper.xml
### The error may involve test.findUserById
### The error occurred while executing a query
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
... 55 more
开发环境
- JDK1.8
- MySQL 8.0.20
maven 使用的 mysql 依赖
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
配置文件 mysql 相关配置信息
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
解决办法
原因是从 JDBC6.0
开始使用新的驱动类,并且 url 中必须要设置时区,否侧会报错。应该使用新的驱动类是 com.mysql.cj.jdbc.Driver
,而不是 com.mysql.jdbc.Driver
,并设置时区。
使用新的 mysql 驱动 jar 包,将依赖替换为更高版本,例如 8.0.15
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
修改驱动的类名,并且在 url 后面加上时区设置,UTC 表示标准时区。
db.driver=com.mysql.jc.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8&serverTimezone=UTC