2、yaml配置文件当中的坑(数字的定义和支持进制书写格式)
1|06、进制数的转换
1|16.1、问题回顾
- 我记得我刚刚开始使用SpringBoot的时候,有一天在做到SpringBoot整合第三方技术的时候
- 我刚好在那天学习到整合Mybatis,做Web项目嘛,不连数据库怎么行?
- 在yml配置文件当中配置数据源--datasource的时候,我遇见了一个问题
- 这就是我当时配置数据源的配置,我遇到了一个问题,我死活都连不上数据库
- 我通过cmd终端连接我的数据库,没问题
- 通过图形界面化工具Navicat连接也没问题
- 但是就是使用SpringBoot配置我的数据库连接的时候,连不上,密码是错的
- 我很郁闷,但是那天我也找到了问题的所在,只是我不明白为什么会出现这个问题
1|26.2、问题复盘
- 我将原先的demo给大家来复个盘
- 接下来,咱们开始打印输出测试一下结果,看看发生了什么事情?
- 我明明写的是 010115,为什么打印出来是4173呢?
1|36.3、问题出现的原因
上述这种情况,其实任何开发人员都有可能遇见的,所以这里需要提一下
- 在我们学习yaml语法规则的时候
- 信息量不大,但是有几个信息容易忽略
- int值支持,二进制,八进制,十六进制
- 二进制是什么:0b1010_0111_1010_1110,这种类型的
- 八进制的语法:以0开头,后面跟上(0-7)=>0 (0-7)=>0(10115)
- 十六进制呢:0x开,(0-9,a-f)跟
我们打开计算器,测试一下,为什么010115 会变成 4173呢?
- 现在明白了吧,我的密码刚好是以0开头的,然后又恰好后面的数字都只包含0-7,他是一个标准的八进制,才会在八转十的时候遇见这个问题
- 只能说太倒霉加上太巧了,但凡密码不是以0开头的都不至于这样,当然,如果是0x开的那遇到了也没辙对吧
- 那么他的隐藏性主要在哪里?
1|46.4、问题的隐藏性
- 我们后台接受数据的时候,password是按照字符串来接收的
- 他识别到了0开的数据(0(010115))以后,并且又是一个纯数字,他默认把它按照数值进行解析=>八进制转十进制
- 转换完毕得到结果了=>4175,那直接将其转换为字符串即可,从而注入到我们的实体类配置项当中
- 最终就出现了我们这么一个问题
1|56.5、总结
- 像我们这个问题最终引发的后果就是,连不上数据库,其实和连数据库有关系吗?没有关系?
- 就是因为这个地方的格式转化问题,你能赖别人吗?
- 人家SpringBoot都推荐了,如果是纯数字结构的,那么你用字符串给他包上就行了
- 我们这里
- 恰巧没用字符串包上、
- 恰巧又刚好是一个八进制,这个八进制被转换成十进制了、
- 恰巧,转化出来的密码又刚好可以和String类型时配上、
- 恰巧,转化出来的十进制密码跟你数据库当中的密码完全不一样、
- 恰巧,你连不上数据库
__EOF__

本文作者:muzlei
本文链接:https://www.cnblogs.com/wavesbright/p/SpringBoot_yaml.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/wavesbright/p/SpringBoot_yaml.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
SpringBoot
标签:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!