本地写了个一个项目后想上传到阿里云服务器(Windows)中,mysql+tomcat+jdk都已经配置好了,但就在项目运行时报错,显示如下
create connection error, url: jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf-8, errorCode 1045, state 28000 java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES) ...
因为控制台显示 user 'root '@'localhost' (using password: YES) ,说明jdbc配置文件不存在问题,问题在于用户名或密码上。
刚开始查了几篇博客,下面将各位博主的博文建议汇总到一起,希望对你有所帮助。
1.username误写做name或添加多余的字符
spring:
datasource:
data-username: root
data-password: '123456'
url: "jdbc:mysql://localhost:3306/jd?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"
driver-class-name: com.mysql.cj.jdbc.Driver
上面的datasource的配置中 使用了data-password、data-username导致了一直循环报错;只要将其改为password和username就可以了
spring:
datasource:
username: root
password: '123456'
url: "jdbc:mysql://localhost:3306/jd?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"
driver-class-name: com.mysql.cj.jdbc.Driver
2.连接配置中出现空格
密码帐号都是对的,错在配置文件(db.properities或者spring-mvc.xml)里出现了空格。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
Debug时,无意中看待到
Access denied for user 'root '@'localhost' (using password: YES),发现配置文件"jdbc.username=root "在root后面多了两个空格,删掉重启一切正常。但是不明白的是com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection方法能过滤空格获取账号密码,但最后一直死循环报错。
总结下,不管druid能否过滤空格,过滤后怎么处理都要保证字段定义正确。
3.localhost密码密文改明码
打开Navicat(或者其他的数据库管理工具均可)检测数据库的表是否 有叫 user 的(通常在mysql的数据库中) 如果有尽量改名
把这个密码改成明文root 或者你自己任意的密码 再次重启项目即可
4.密码带引号或忘记带引号
(是否带引号取决于配置文件和spring版本)
spring:(springboot版本2.1.4)
datasource:
url: jdbc:mysql://192.168.241.200/boot
username: root
password: '0000'
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
此时若忘记扩引号,则会显示errorCode 1045, state 28000的bug,这一点不易发现。
5.修改密码
查询了上述几个方法之后,依次实验之后发现依然不能解决问题,仍然显示errorCode 1045, state 28000的错误,而且是循环显示。
无奈,没有头绪,从最开始配置mysql慢慢往回倒。
最后发现将localhost的密码由123456改为root,其实可以说是第四个解决办法给予的提示,不过幸亏到最后解决了,便不再报上述error。
Bug:
循环报错
ERROR 127784 — [reate-700837405] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://localhost:3306/jd?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8, errorCode 1045, state 28000
java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: NO)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197) ~[mysql-connector-java-8.0.19.jar:8.0.19]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.1.21.jar:1.1.21]
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) ~[druid-1.1.21.jar:1.1.21]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.1.21.jar:1.1.21]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1646) ~[druid-1.1.21.jar:1.1.21]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1710) ~[druid-1.1.21.jar:1.1.21]
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2753) ~[druid-1.1.21.jar:1.1.21]
当然希望大佬看到这篇文章如有相同的问题请留下您的高见!
欢迎关注公众号:单身程序猿
自己做的公众号,希望收获你的关注~