您的位置:首页 > 娱乐 > 八卦 > 嘉兴网站推广价格_站长工具seo综合查询怎么关闭_百度一下你就知道网页_seo文章代写平台

嘉兴网站推广价格_站长工具seo综合查询怎么关闭_百度一下你就知道网页_seo文章代写平台

2025/1/17 13:44:09 来源:https://blog.csdn.net/wgy17734894660/article/details/143380281  浏览:    关键词:嘉兴网站推广价格_站长工具seo综合查询怎么关闭_百度一下你就知道网页_seo文章代写平台
嘉兴网站推广价格_站长工具seo综合查询怎么关闭_百度一下你就知道网页_seo文章代写平台

01 springboot集成mybatis后密码正确但数据库连接失败

问题描述:

1.datasource配置:

//application.yaml
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 040224
logging:level:com.itheima: debugpattern:dateformat: HH:mm:ss
mybatis:mapper-locations: classpath*:mapper/*.xml

2.报错信息

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.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
### The error may exist in file [F:\Java_Projects\Mybatis\mp-demo\target\classes\mapper\UserMapper.xml]
### The error may involve com.itheima.mp.mapper.UserMapper.queryUserById
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.翻译:
org.mybatis.spring.MyBatisSystemException: 
嵌套异常是 org.apache.ibatis.exceptions.PersistenceException: 
### 查询数据库时出错。原因:org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获得JDBC连接;
嵌套异常是 java.sql.SQLNonTransientConnectionException: 无法创建到数据库服务器的连接。尝试重新连接3次。放弃。
### 错误可能存在于文件 [F:\Java_Projects\Mybatis\mp-demo\target\classes\mapper\UserMapper.xml]
### 错误可能涉及 com.itheima.mp.mapper.UserMapper.queryUserById
### 错误发生在执行查询时
### 原因:org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获得JDBC连接;
嵌套异常是 java.sql.SQLNonTransientConnectionException: 无法创建到数据库服务器的连接。尝试重新连接3次。放弃。

翻译大致意思是尝试连接数据库三次后失败。

故障排查

1.检查数据库是否正常启动?

2.是否是密码错误?

3.是否是pom引入的各种依赖的版本存在冲突或存在过高、过低的问题?

经检查pom引入的各种依赖的版本导入正常且版本不存在冲突或存在过高、过低的问题。

4.是否为数据源文件application.yaml的配置存在问题?

经检查,数据源文件配置无误,一切正常。

经分析后,发现代码没有问题,出问题的应该还是数据库连接的地方。

断点调试

我们找一个测试方法启动,然后打断点进行调试:

目前一切正常,我们进入下一步。

目前仍然正常,我们继续进行下一步。

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.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
### The error may exist in file [F:\Java_Projects\Mybatis\mp-demo\target\classes\mapper\UserMapper.xml]
### The error may involve com.itheima.mp.mapper.UserMapper.queryUserById
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.翻译:
org.mybatis.spring.MyBatisSystemException: 
嵌套异常是 org.apache.ibatis.exceptions.PersistenceException: 
### 查询数据库时出错。原因:org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获得JDBC连接;
嵌套异常是 java.sql.SQLNonTransientConnectionException: 无法创建到数据库服务器的连接。尝试重新连接3次。放弃。
### 错误可能存在于文件 [F:\Java_Projects\Mybatis\mp-demo\target\classes\mapper\UserMapper.xml]
### 错误可能涉及 com.itheima.mp.mapper.UserMapper.queryUserById
### 错误发生在执行查询时
### 原因:org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获得JDBC连接;
嵌套异常是 java.sql.SQLNonTransientConnectionException: 无法创建到数据库服务器的连接。尝试重新连接3次。放弃。

此时,仍然报错。我们刚才其实有注意到,在我们执行下述语句时,是先有application is running弹出,后续才出现报错。

User user = userMapper.queryUserById(5L);

我们不妨大胆猜测一下,我们的application.yaml文件存在我们不知道的问题。

我们先跟进username的源码然后打断点。此时可以看到是一切正常的。

那么我们再对passoword的源码打断点。

此时我们注意到,密码居然不是我们设置的040224,而是16532,难道是我们漏了某个地方吗?

我们先修改密码,改成12345后再次尝试。

密码又正常了回到我们设置的密码,难道和密码位数有关,只能设置五位以内的位数吗?

我们尝试将密码修改为123456,再次尝试。

一切正常,那么我们再将密码修改为012345,再次尝试。

显然,密码又不正常了,难道密码不能以0数字开头?

查阅相关资料后,发现

yaml文件读取数字属性时先转化成Integer类型,对于Integer类型数字来说,0开头的数字则被解析为八进制,因此会导致密码错误。

故障解决

由于yaml文件读取数字属性时先转化成Integer类型,转换时导致密码被解析错误,因此我们尝试在密码两边加上"",使其被视为字符串,不被转换。

显然,程序运行正常,故障解决。

故障总结

yaml文件读取数字属性时先转化成Integer类型,但是对于Integer类型数字来说,0开头的数字则被解析为八进制,这也导致在连接数据库时密码错误而连接不上数据库。

同样的,还有0x开头的数字会被解析为十六进制。

因此,我们需要尽力避免使用0开头的数字作为配置信息。或者将0开头数字两边加上""使其视为字符串,从而避免被转换数据类型。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com