6、进制数的转换

6.1、问题回顾

  1. 我记得我刚刚开始使用SpringBoot的时候,有一天在做到SpringBoot整合第三方技术的时候
  2. 我刚好在那天学习到整合Mybatis,做Web项目嘛,不连数据库怎么行?
  3. 在yml配置文件当中配置数据源--datasource的时候,我遇见了一个问题
    • 我个人有做笔记的习惯嘛,我喜欢写一步做一步,在那天这个错误的信息被我留存下来了
  4. 这就是我当时配置数据源的配置,我遇到了一个问题,我死活都连不上数据库
    • 我通过cmd终端连接我的数据库,没问题
    • 通过图形界面化工具Navicat连接也没问题
    • 但是就是使用SpringBoot配置我的数据库连接的时候,连不上,密码是错的
  5. 我很郁闷,但是那天我也找到了问题的所在,只是我不明白为什么会出现这个问题

6.2、问题复盘

  1. 将原先的demo给大家来复个盘

    • 这是咱的yml配置文件,我现在将它(password)设置为int类型
    • 同时,这里有个实体test,我让他来读取我这个配置文件当中的值
  2. 接下来,咱们开始打印输出测试一下结果,看看发生了什么事情?
  3. 我明明写的是 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配置文件当中的坑(数字的定义和支持进制书写格式)的更多相关文章

  1. java 将数字转成成16进制

      java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...

  2. 关于C++读入数字按位取出与进制转换问题

    这一片博客我就不写具体的一个题了,只是总结一种典型问题——读入数字按位取出. 就拿数字12345举例吧. 是首先,我们要取出个位.这样取出: 12345/1=12345 12345%10=5.    ...

  3. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

  4. Appium + python -yaml配置文件

    在线安装:pip install yaml import yamlimport os # 获取当前脚本所在文件夹路径curpath = os.path.dirname(os.path.realpath ...

  5. python的logging模块之读取yaml配置文件。

    python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...

  6. Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件

    由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...

  7. Kubernetes 笔记 05 yaml 配置文件详解

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  8. Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取

    Yaml配置文件 概述 Spring Boot在支持application.properties配置文件的同时,也支持application.yaml配置文件. 配置文件中的属性,可以通过: 通过@V ...

  9. saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)

    一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...

随机推荐

  1. 深入Synchronized各种使用方法

    深入学习Synchronized各种使用方法 在Java当中synchronized通常是用来标记一个方法或者代码块.在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个 ...

  2. mybatis 02: 添加并简单使用mybatis

    三层架构 项目开发时,遵循的一种设计模式,分为三层 界面层:用来接收客户端输入的数据,调用业务逻辑层进行功能处理,返回结果给客户端 过去的servlet就完成了界面层的功能(但是他做的更多) 业务逻辑 ...

  3. 自己做一个RTOS

    什么是操作系统?其实就是一个程序, 这个程序可以控制计算机的所有资源,对资源进行分配,包括CPU时间,内存,IO端口等,按一定规则分配给所需要的进程(进程?也就是一个程序,可以单独执行),并且自动控制 ...

  4. Redis 14 发布订阅

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  5. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

    CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...

  6. 【mido】python的midi处理库

    安装mido库:pip install mido pipy地址:https://pypi.org/project/mido/ mido官方文档:https://mido.readthedocs.io/ ...

  7. 「题解报告」P4577 [FJOI2018]领导集团问题

    题解 P4577 [FJOI2018]领导集团问题 题解区好像没有线段树上又套了二分的做法,于是就有了这片题解. 题目传送门 怀着必 WA 的决心交了两发,一不小心就过了. 题意 求一个树上最长不下降 ...

  8. 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本

    06_Linux基础-NGINX和浏览器.网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本 一 ...

  9. springboot拦截器总结

    Springboot 拦截器总结 拦截器大体分为两类 : handlerInterceptor 和 methodInterceptor 而methodInterceptor 又有XML 配置方法 和A ...

  10. 【读书笔记】C#高级编程 第十三章 异步编程

    (一)异步编程的重要性 使用异步编程,方法调用是在后台运行(通常在线程或任务的帮助下),并不会阻塞调用线程.有3中不同的异步编程模式:异步模式.基于事件的异步模式和新增加的基于任务的异步模式(TAP, ...