异常描述:
Error creating bean with name 'jdbcConverter' defined in class path resource [org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration$SpringBootJdbcConfiguration.class]: Unsatisfied dependency expressed through method 'jdbcConverter' parameter 4; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcDialect' defined in class path resource [org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration$SpringBootJdbcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.relational.core.dialect.Dialect]: Factory method 'jdbcDialect' threw exception; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
异常原因:
MySQL新版本的加密规则变了,在MySQL8.0之后,密码的加密规则是caching_sha2_password,之前的是mysql_native_password,所以解决办法要不就是升级navicat要不就是修改密码的加密规则。
解决方法:
这里我们采用 修改加密规则 的解决方案 如下:
- 首先,需要在CMD中 使用mysql -u root -p 命令,随后输入你的MySQL密码,登录到MySQL。
- 随后输入以下命令修改 加密规则
-
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则【注意分号不要省略】
-
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '输入你的密码'; #更新一下用户的密码【注意分号不要省略,这里的 输入你的密码 替换成 旧密码或你的新密码】
-
FLUSH PRIVILEGES; #刷新权限【注意分号不要省略】
-
- 随后退出MySQL即可,使用Ctrl + z + 回车
这里再分享两个常见问题:
MySQL8.0及以上版本的driver-class-name应该是 com.mysql.cj.jdbc.Driver
MySQL8.0以下版本的driver-class-name应该是 com.mysql.jdbc.Driver
乱码问题:
MySQL8.0及以上版本的url需要加上serverTimezone=UTC参数,例如:jdbc:mysql://localhost:3306/你要连接的数据库?serverTimezone=UTC
在这里,也分享出我的JDBC配置【YAML格式,MySQL8.0及以上版本】:
spring:
datasource:
# 数据库驱动名称
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/你要连接的数据库?serverTimezone=UTC
username: root
password: 你的数据库密码
# SpringBoot默认数据库连接池就是 Hikari
# type: com.zaxxer.hikari.HikariDataSource