问题记录单

是什么?

  • 今天在帮室友进行后端环境检查,启动SpringBoot项目的时候,出现了以下错误:
1
2
3
4
5
6
7
8
[D:\shixi\last02\demo\demo\target\classes\mapper\StudentMapper.xml]
### The error may involve com.example.demo.dao.StudentDao.loginStudent
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)] with root cause

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
......
......

为什么?

  • 一开始我认为是逻辑代码编写出错,进行了Controller Service Dao的正常排查,没有发现什么问题。

  • 接着百度了一下,修改了mysql-connect-java版本,以为是mysql版本和前者版本兼容性出错,结果检查之后发现两者版本一致,没有问题。

  • application.yml中密码配置出错,使用了命令行登录mysql,这个密码没什么问题。

  • 再去进行Mapper文件的排查,sql也没有问题,mapper文件resultType也没什么问题,添加了ResultMap之后还是报同样的错误,问题不在这里。

  • 前端请求有问题?不可能,报错是数据库方面的。就算是前端有问题,那也应该是应用层和逻辑层方面。

  • 最终,发现application.yml文件中有乱码问题存在:”# ???”,继续百度,发现了有个文件中写道yml配置文件乱码,而其spring.datasource.password设置的是数字,可能是进行值传递的时候,原本的密码被改成了其他样子,呵呵( ̄▽ ̄)。

怎么做?

  • 将password用双引号**” “包裹即可,例如密码是:123,改为”123”**

反思

  • 一定要特别注意乱码问题,尤其是涉及到配置文件,其中的一个乱码问题可能不易察觉的,同时可以让你的项目跑不起来。
  • 观察配置文件其他位置因乱码有没有无法识别的字符,如果有就要小心了。