空空叶博客 学习与开发博客

几种配置方式比较

2017-05-05

几种配置方式比较

说明: 这里并非比较各种配置文件格式本身的好坏,而是仅对在配置文件领域的适用性进行比较.

一. 背景

大部分项目都有配置,比如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而只能使用空格来缩进
  • 无编辑时验证

三. 比较

使用什么编辑器?

  1. 如果使用纯文本编辑器直接编辑配置的源文件,那可读性与编辑性就比较重要,这时:
    • json比较不适用,因为易读性差
    • xml易读性同样不好,但有编辑时验证
    • properties,ini简单易用,但无法编辑对象,列表等复杂的配置格式
    • yml易读性好,但编辑语法与格式要求很严格,容易编辑出错
  2. 如果使用图形界面编辑器来编辑配置,那json,xml,yml都不会有什么区别,因为不用接触源文件,而这几种格式在图形界面下显示的几乎无差别,就是说图形界面只用一种,但是可以保存为json,xml或yml格式(甚至xml可能会更好点,如果保存后再使用xml的DTD验证的话,但如果都用图形界面了,那各配置项的规则其实可以在图形界面进行设置不是吗?).

配合Spring使用?

Spring唯一允许的配置格式就是properties

四. 验证

编辑时验证

指在编辑配置文件时,需要对编辑的内容进行简单的验证.以上几种方式只有xml有DTD验证.

运行时验证

即项目加载配置文件时,需要对配置文件内的配置项进行验证.

一般有以下几种方式:

  1. 用jackson库,将xml,json或yml格式的配置读入再统一转化为xml利用xml的DTD进行运行时验证
  2. 自己编写相应的验证框架(目前自己用的方式)
  3. 最原始常用的方式,读入配置,手动进行验证,如if (value < 0) ...,但配置多的时候效率会很低
  4. 不验证,人工保证配置是正确的,一般仅在项目是自己使用的时候适合,但安全性不好.

五. 总结

  1. 如果配置比较简单,没有数组,对象等复杂的配置,那properties,ini是很好的选择
  2. 如果配置比较复杂,编辑配置的人很熟悉yml语法规则,那用yml格式是最好的选择,因为易读并且编辑起来很方便
  3. 如果配置要被很多不同的人改,那用图形界面来编辑是最好的选择.因为这些人可能是用户,而对于用户,不能要求他们都去学习什么复杂的语法,尽量以简单为主.

上一篇 内存溢出

下一篇 垃圾收集机制

目录