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、问题出现的原因
上述这种情况,其实任何开发人员都有可能遇见的,所以这里需要提一下
- 在我们学习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类型时配上、
- 恰巧,转化出来的十进制密码跟你数据库当中的密码完全不一样、
- 恰巧,你连不上数据库
2、yaml配置文件当中的坑(数字的定义和支持进制书写格式)的更多相关文章
- java 将数字转成成16进制
java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...
- 关于C++读入数字按位取出与进制转换问题
这一片博客我就不写具体的一个题了,只是总结一种典型问题——读入数字按位取出. 就拿数字12345举例吧. 是首先,我们要取出个位.这样取出: 12345/1=12345 12345%10=5. ...
- 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!
转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208 版权声明:本文为博主 ...
- Appium + python -yaml配置文件
在线安装:pip install yaml import yamlimport os # 获取当前脚本所在文件夹路径curpath = os.path.dirname(os.path.realpath ...
- python的logging模块之读取yaml配置文件。
python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...
- Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件
由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...
- Kubernetes 笔记 05 yaml 配置文件详解
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取
Yaml配置文件 概述 Spring Boot在支持application.properties配置文件的同时,也支持application.yaml配置文件. 配置文件中的属性,可以通过: 通过@V ...
- saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...
随机推荐
- 案例复现,带你分析Priority Blocking Queue比较器异常导致的NPE问题
摘要:本文通过完整的案例复现来演示在什么情况会触发该问题,同时给出了处理建议.希望读者在编程时加以借鉴,避免再次遇到此类问题. 本文分享自华为云社区<Priority Blocking Queu ...
- 百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12
Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复 ...
- Blazor预研与实战
背景 最近一直在搞一件事,就是熟悉Blazor,后期需要将Blazor真正运用到项目内.前期做了一些调研,包括但不限于 Blazor知识学习 组件库生态预研 与现有SPA框架做比对 与WebForm做 ...
- STC8H开发(十六): GPIO驱动XL2400无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 056_末晨曦Vue技术_处理边界情况之X-template
处理边界情况之X-template 点击打开视频讲解更加详细 另一个定义模板的方式是在一个<script>元素中,并为其带上 text/x-template 的类型,然后通过一个 id 将 ...
- [2021.4.9多校省选模拟35]隐形斗篷 (prufer序列,背包DP)
题面 我编不下去了! 给出 n n n 个点,第 i i i 个点的度数限制为 a i a_i ai,现在需要选出 x x x 个点构成一颗树,要求这 x x x 个点中每个点的度数不超过这个点的 ...
- 【java】学习路线9-非静态内部类、外部类
//内部类只能在其外部类当中使用//局部内部类:定义在方法里面//如果内部类和外部类有重名,就近原则在内部类中优先访问内部类.//如果想访问宿主类的同名成员,使用OuterClass.this.xxx ...
- Javaweb—登录案例
案例:用户登录 用户登录案例需求: 编写login.html登录页面 username & password 两个输入框 使用Druid数据库连接池技术,操作mysql,day14数据库中us ...
- Windows平台Unity3d播放多路RTMP或RTSP流
好多开发者在做AR.VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大.而且周期长,不适合快速出产 ...
- 第十二章 Kubernetes的服务暴露插件--traefik
1.前言 之前部署的coredns实现了k8s的服务在集群内可以被自动发现,那么如何使得服务在k8s集群外被使用和访问呢? 使用nodeport星的Service:此方法只能使用iptables模型, ...

