几种配置方式比较
说明: 这里并非比较各种配置文件格式本身的好坏,而是仅对在配置文件领域的适用性进行比较.
一. 背景
大部分项目都有配置,比如log4j.xml或log4j.properties,spring的各种xml及properties,tomcat的web.xml等
很多项目有复杂的配置要求的时候会使用xml当配置文件格式,如果配置要求简单则会用properties或ini格式,有些项目则会有自己的专用配置文件格式,如nginx的nginx.conf
以下对比较通用的几种配置文件格式进行讨论,希望后面自己做项目需要用到配置文件的时候可以知道如何选择.
二. 配置方式
1. Properties,ini等
这种配置的特点就是类似纯文本
优点
- 简单易读
缺点
- 限制很大,有些配置几乎难以实现,如
对象
,列表
等形式的配置 - 无编辑时验证
2. json
优点
- 语法简单
缺点
- 易读性不够好,主要因为键必须包围在双引号内,造成编辑与阅读都不方便
- 无编辑时验证
3. xml
优点
- 有编辑时验证(DTD)
缺点
- 易读性差
4. yml
优点
- 易读,因为没有额外的字符造成干扰
缺点
- 语法格式比较复杂
- 可编辑性不够好,具体表现在缩进要求严格,无法使用tab而只能使用空格来缩进
- 无编辑时验证
三. 比较
使用什么编辑器?
- 如果使用
纯文本
编辑器直接编辑配置的源文件,那可读性与编辑性就比较重要,这时:- json比较不适用,因为易读性差
- xml易读性同样不好,但有编辑时验证
- properties,ini简单易用,但无法编辑对象,列表等复杂的配置格式
- yml易读性好,但编辑语法与格式要求很严格,容易编辑出错
- 如果使用
图形界面
编辑器来编辑配置,那json,xml,yml都不会有什么区别,因为不用接触源文件,而这几种格式在图形界面下显示的几乎无差别,就是说图形界面只用一种,但是可以保存为json,xml或yml格式(甚至xml可能会更好点,如果保存后再使用xml的DTD验证的话,但如果都用图形界面了,那各配置项的规则其实可以在图形界面进行设置不是吗?).
配合Spring使用?
Spring唯一允许的配置格式就是properties
四. 验证
编辑时验证
指在编辑配置文件时,需要对编辑的内容进行简单的验证.以上几种方式只有xml有DTD验证.
运行时验证
即项目加载配置文件时,需要对配置文件内的配置项进行验证.
一般有以下几种方式:
- 用jackson库,将xml,json或yml格式的配置读入再统一转化为xml利用xml的DTD进行运行时验证
- 自己编写相应的验证框架(目前自己用的方式)
- 最原始常用的方式,读入配置,手动进行验证,如
if (value < 0) ...
,但配置多的时候效率会很低 - 不验证,人工保证配置是正确的,一般仅在项目是自己使用的时候适合,但安全性不好.
五. 总结
- 如果配置比较简单,没有数组,对象等复杂的配置,那properties,ini是很好的选择
- 如果配置比较复杂,编辑配置的人很熟悉yml语法规则,那用yml格式是最好的选择,因为易读并且编辑起来很方便
- 如果配置要被很多不同的人改,那用图形界面来编辑是最好的选择.因为这些人可能是
用户
,而对于用户,不能要求他们都去学习什么复杂的语法,尽量以简单为主.