c读取ini配置文件_细数Java项目中用过的配置文件(ini 篇)
Java 菜鸟,会把可变的配置信息写死在代码里;Java 老鸟,会把可变的配置信息提取到配置文件中。坊间流传这么一句非科学的衡量标准,来评判程序员的级别。
那么,项目中的配置信息,你平时都是怎样来实现的呢?你项目中用过哪些配置文件呢?
近期将结合实际项目或源码,说说这些年用过的那些有关配置的奇技淫巧,看看能否帮你提高研发能力,那怕是提高一丢丢,就算成功。
后缀为 .ini 的文件,你用过没?
后缀为 .ini 的文件,是 Initialization File 的缩写,主要用于程序的初始化的一些配置参数,后缀当然也可以是 .conf、.cfg,只是项目中习惯上用后缀 .ini 罢了。
简单介绍一下,一个 ini 配置文件主要由节(section)、键值对组成。
如上图所示,ini 文件中,配置参数都是以节(section)为单位组合在一起的,每个节名字都被方括号包围着,像 owner、database 都被方括号括着。而每个节声明后的键值对都属于该 section,而且一个 section 没有结束标识符,一个节的开始就是上一个节的结束。
后缀为 .ini 的文件,怎么用啊?
在自研框架或者业务项目开发中,往往会配置一些项目启动时要初始化的一些参数信息,例如端口、域名等等。从老项目中截取一段,其实就配置键值对而已,很简单,有没有?
另外,项目研发中在面对身份验证、授权、密码和会话管理等需求时,经常会集成 Java 安全框架 Shiro,而 Shiro 就提供了使用 ini 文件,进行配置参数的能力(INI is easy to read, simple to use, and requires very fewdependencies)。
后缀为 .ini 的文件,怎么解析啊?
老土方法:用脚指头想出来的简单方法,往文件上插一根管子,直接采用 Properties 的 load 方法完成数据的读取,势必能达到解析的目的(脑补代码,懒得写代码啦)。
老土方法:用手指头想出来的简单方法,往文件上插一根管子,一行一行去读,再按照等号拆分键值对,最后把键值对向 Map 放一下,必然也能达到解析的目的(脑补代码,代码懒得写啦)。
优雅方法:看看 Shiro 咋搞的?项庄舞剑意在沛公。尝试告诉你:为什么 Java 轮子会多呢?这可能就是造轮子的其中一条路径,熟读源码,到处抄,哈哈。
看看 Shiro,人家到底怎么解析的?
首先,Shiro 加载配置文件支持好几种方式,我们就挑如何加载类路径下的 shiro.ini 配置文件进行剖析,掌握这一条路径,其它方式殊途同归。
如上图源码所示,在加载 shiro.ini 配置文件前,首先会判断文件是否存在,存在则从类路径下进行加载,而且会发现 Shiro 把 ini 配置封装成了 Ini 对象(这不就是面向对象吗?Java 的核心思想:Every thing is object!)。
如上图源码所示,很显然会发现,具体读取 shiro.ini 配置的事情,就交给了 ResourceUtils 去办了(术业有专攻,分工明确,各司其职),不过和咱们能想到的土方法也差不多,就是往文件上插一根管子,然后调用 load 方法进行读取。
通过上面源码截图,发现 load 方法只是稍微装饰了一下,把 InputStream 变成了 Reader(设计模式:装饰器模式;面向对象的核心:多态)。
看到上面的代码,会发现依然没有真正的读取,而是继续包装 Reader,变成 Scanner 来获取文件输入(敢问,有必要这么绕来绕去吗?不过,无所谓,继续往下看!)
到这儿,如上面截图所示,看到了庐山真面目,终于见到了一行一行进行读取内容,并进行截取其中的 section(节),也就是 shiro.ini 中配置的 [main]、[urls] 等等,接着把每个 section 下面的内容直接拼接在一起形成字符串,而此时,并没有拆分键值对。
如上面源码所示,很显然 Shiro 把 ini 配置的组件又封装成了 Section 对象(再一次体会Java 的核心思想:Every thing is object!)。
不过,还记得配置文件咋配置的吗?把 shiro.ini 配置图再贴一次。
我们结合下面的源码,再去看上面这个段配置,顺道看看 Section 对象里面都有啥?
如上图源码标注 1,定义了一个 Map 用于保存配置的键值对信息;代码标注 2,是把上一步的字符串转换成 Map,具体转换如下图所示,按照等号进行拆分键值对,并放到 Map中。
仔细去看源码,会发现拆分键值对时,不仅仅是按照等号,但是 who care 呢?只因为到这儿,梗概已经了解个八九不离十啦。
好了,剖析的差多了,从源码去看反而感觉复杂了不少,其实际使用超级之简单,和咱们用手指头想的老土方法差不多,只是 Shiro 封装的稍微好一些。
但是,你有没有发现,有好多代码是可以简单抽一抽,你就可以直接应用到项目中的呢?
它山之石可以攻玉
它山之石可以攻玉,相信会对你有帮助!
行文至此,你肯定会有疑问,为什么不用 properties 啊?为什么不用 ymal 啊?其实说实话,黑猫白猫抓住老鼠都是好猫。
另外,为了能够帮你提高研发能力(那怕是提高一丢丢呢),后续将继续结合实际项目,看看用到的其它形式的配置文件,敬请期待。
欢迎关注「一猿小讲」,了解更多精彩。
c读取ini配置文件_细数Java项目中用过的配置文件(ini 篇)相关推荐
- java项目 配置文件_细数Java项目中用过的配置文件(properties篇)
灵魂拷问:在不重启服务的前提下,如何让配置修改生效的呢?有什么奇技淫巧吗? 灵魂拷问:在 Java 项目中,总能看到以 .properties 为后缀的文件踪影,这类配置文件是怎么加载的呢? 项目研发 ...
- yaml for java_细数Java项目中用过的配置文件(YAML篇)
灵魂拷问:YAML,在项目中用过没?它与 properties 文件啥区别? 目前 SpringBoot.SpringCloud.Docker 等各大项目.各大组件,在使用过程中几乎都能看到 YAML ...
- java 短路判断_细数Java最坑爹的10大功能点
作者:践行精神自由 原文:https://www.sohu.com/a/357927861_115128 作为一门面向对象的编程语言,Java凭借其简单易用.功能强大的特点受到了广大编程爱好者的青睐, ...
- 《八股文》细数Java线程、并发、锁,温故而知新
<八股文>细数Java线程.并发.锁,温故而知新 基础 1. 并行.并发有什么区别? 2. 说说什么是进程和线程? 3. 说说线程有几种创建方式? 4. 为什么调用start()方法时会执 ...
- php反序列化java.long_细数java中Long与Integer比较容易犯的错误总结
今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较. 其实这样是错误的. 因为Long与Ineger都是包装类型,是对象. ...
- IDEA为java项目中用到python的模块设置Python interpreter
IDEA为java项目中用到python的模块设置Python interpreter Java项目中模块用到了python,没有为模块设置Python解释器,因此点击右上角Configure Pyt ...
- Java配置文件找不到指定_转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty(user.dir)的理解...
还有就是:System.getProperty("user.dir"),都说获得的是"工作目录",有老铁们在意这个,工作目录怎么理解吗?我这做了个简单的测试. ...
- mysql数据库语句分类_细数MySQL中SQL语句的分类
1:数据定义语言(DDL) 用于创建.修改.和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP DATABASE):2:创建.修改.重命名.删除表(C ...
- 赵英时遥感原理分析和应用课件_细数5种停车场防砸车技术原理分析与应用
原标题:细数5种停车场防砸车技术原理分析与应用 一.压力波防砸装置 也叫遇阻防砸,主要是安装遇阻返回装置,当道闸杆下落过程中接触到车辆或者行人(接触力度是可以调节的),装置道闸杆底下的橡胶条受到阻力, ...
最新文章
- [codevs1022]覆盖
- 你真的了解 lambda 吗(纠错篇)?
- 和quot;分别是什么?
- html5 clip,canvas中使用clip()函数裁剪方法
- 最简易上手的Numpy学习笔记一
- 2019.5.18-5.19 ACM-ICPC 全国邀请赛(西安)赛后总结
- Using OpenCV Java with Eclipse
- 给Debian浏览器安装flash播放插件
- linux查看服务_Linux服务下通过指令查看JVM(非原创侵删)
- 『神器』如何免费下载百度文库付费资料?
- fgo国服登陆显示服务器错误,命运冠位指定安装失败怎么办 FGO国服安装失败解决办法...
- android手机运行win10,Win10可以直接运行你手机里的安卓APP了:三星率先支持
- 《一个64位操作系统的设计与实现》学习实践3-boot加载loader
- python 标准差计算(std)
- spark分布式矩阵采坑记
- Laravel开发的小程序后台管理系统
- 程序员幽默:让你笑到肚子痛的搞笑动图
- 区块链:热追背后需冷静 技术应用要同步
- 安全培训总结-Https
- c/c++软件工程师面试题