正文
2、yaml配置文件当中的坑(数字的定义和支持进制书写格式)
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
6、进制数的转换
6.1、问题回顾
-
我记得我刚刚开始使用SpringBoot的时候,有一天在做到
SpringBoot
整合
第三方技术
的时候
-
我刚好在那天学习到整合Mybatis,
做Web项目嘛,不连数据库怎么行?
-
在yml配置文件当中配置数据源--
datasource
的时候,我
遇见了一个问题
-
我个人有做笔记的习惯嘛,我喜欢
写一步做一步
,在那天这个
错误的信息被我留存下来了
-
-
这就是我当时配置数据源的配置,
我遇到了一个问题,我死活都连不上数据库
-
我通过
cmd终端
连接我的数据库,没问题
-
通过图形界面化工具
Navicat
连接也没问题
-
但是就是使用
SpringBoot
配置我的数据库连接的时候,连不上,密码是错的
-
我很郁闷,但是那天我也找到了
问题的所在
,只是
我不明白
为什么会
出现这个问题
6.2、问题复盘
-
我
将原先的demo给大家来复个盘
-
-
这是
咱的yml配置文件
,我现在将它(
password
)设置为
int类型
的
-
同时,这里有个实体
test
,我让
他来读取我这个配置文件当中的值
-
-
接下来,咱们开始打印输出测试一下结果,看看发生了什么事情?
-
-
我明明写的是
010115
,为什么打印出来是
4173呢?
6.3、问题出现的原因
- 我记得我刚刚开始使用SpringBoot的时候,有一天在做到 SpringBoot 整合 第三方技术 的时候
- 我刚好在那天学习到整合Mybatis, 做Web项目嘛,不连数据库怎么行?
-
在yml配置文件当中配置数据源--
datasource
的时候,我
遇见了一个问题
- 我个人有做笔记的习惯嘛,我喜欢 写一步做一步 ,在那天这个 错误的信息被我留存下来了
-
这就是我当时配置数据源的配置,
我遇到了一个问题,我死活都连不上数据库
- 我通过 cmd终端 连接我的数据库,没问题
- 通过图形界面化工具 Navicat 连接也没问题
- 但是就是使用 SpringBoot 配置我的数据库连接的时候,连不上,密码是错的
- 我很郁闷,但是那天我也找到了 问题的所在 ,只是 我不明白 为什么会 出现这个问题
6.2、问题复盘
-
我
将原先的demo给大家来复个盘
-
-
这是
咱的yml配置文件
,我现在将它(
password
)设置为
int类型
的
-
同时,这里有个实体
test
,我让
他来读取我这个配置文件当中的值
-
-
接下来,咱们开始打印输出测试一下结果,看看发生了什么事情?
-
-
我明明写的是
010115
,为什么打印出来是
4173呢?
6.3、问题出现的原因
- 这是 咱的yml配置文件 ,我现在将它( password )设置为 int类型 的
- 同时,这里有个实体 test ,我让 他来读取我这个配置文件当中的值
上述这种情况,其实任何开发人员都有可能遇见的,所以这里需要提一下
- 在我们学习 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开的那遇到了也没辙对吧
- 那么他的 隐藏性主要在哪里 ?
6.4、问题的隐藏性
-
我们后台接受数据的时候,
password
是按照字符串来
接收的
-
他识别到了0开的数据(0(
010115)
)以后,并且又是一个纯数字,他
默认
把它按照
数值进行解析
=>
八进制转十进制
-
转换完毕得到结果了=>4175,那直接将其转换为字符串即可,从而注入到我们的实体类配置项当中
-
最终就出现了我们这么一个问题
6.5、总结
-
像我们这个问题最终引发的后果就是,连不上数据库,其实和连数据库有关系吗?没有关系?
-
就是因为这个地方的格式转化问题,你能赖别人吗?
-
-
人家
SpringBoot
都推荐了,如果是纯数字结构的,那么
你用字符串给他包上就行了
-
我们这里
-
恰巧没用字符串包上、
-
恰巧又刚好是一个八进制,这个八进制被转换成十进制了、
-
恰巧,转化出来的密码又刚好可以和String类型时配上、
-
恰巧,转化出来的十进制密码跟你数据库当中的密码完全不一样、
-
恰巧,你连不上数据库
- 像我们这个问题最终引发的后果就是,连不上数据库,其实和连数据库有关系吗?没有关系?
-
就是因为这个地方的格式转化问题,你能赖别人吗?
- 人家 SpringBoot 都推荐了,如果是纯数字结构的,那么 你用字符串给他包上就行了
-
我们这里
- 恰巧没用字符串包上、
- 恰巧又刚好是一个八进制,这个八进制被转换成十进制了、
- 恰巧,转化出来的密码又刚好可以和String类型时配上、
- 恰巧,转化出来的十进制密码跟你数据库当中的密码完全不一样、
- 恰巧,你连不上数据库