<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Blog%3A%E6%96%B0%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F</id>
	<title>Blog:新的配置文件格式 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Blog%3A%E6%96%B0%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F"/>
	<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Blog:%E6%96%B0%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&amp;action=history"/>
	<updated>2026-06-03T00:59:21Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=Blog:%E6%96%B0%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&amp;diff=2485&amp;oldid=prev</id>
		<title>imported&gt;Riguz：​程序中大都需要定义各种配置，诸如数据库连接之类的，最近也需要开发Web框架，于是也想找个比较好用的配置文件格式。搞来搞去，发现都不是很喜欢。先来看一下几种常见的配置文件格式吧：</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Blog:%E6%96%B0%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&amp;diff=2485&amp;oldid=prev"/>
		<updated>2018-02-24T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;程序中大都需要定义各种配置，诸如数据库连接之类的，最近也需要开发Web框架，于是也想找个比较好用的配置文件格式。搞来搞去，发现都不是很喜欢。先来看一下几种常见的配置文件格式吧：&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;程序中大都需要定义各种配置，诸如数据库连接之类的，最近也需要开发Web框架，于是也想找个比较好用的配置文件格式。搞来搞去，发现都不是很喜欢。先来看一下几种常见的配置文件格式吧：&lt;br /&gt;
=== Properties===&lt;br /&gt;
Java所带来的Properties文件可能是用的比较多的格式了吧，就是一个简单的key-value的文本文件，但是缺点也很明显：&lt;br /&gt;
* Unicode需要转码，看着不是很蛋疼么？&lt;br /&gt;
* 不支持数组类型，所以以前经常会用key.1,key.2...key.n这样的方式来遍历得到一个数组&lt;br /&gt;
* 扁平结构，如果碰到一些比较长的key就有点不好看了（比如SpringCloud的配置，spring.jpa.datasource.xxx)写起来比较麻烦&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
spring.data.mongodb.host= localhost&lt;br /&gt;
spring.data.mongodb.port=27017 # the connection port (defaults to 27107)&lt;br /&gt;
spring.data.mongodb.uri=mongodb://localhost/test # connection URL&lt;br /&gt;
spring.data.mongo.repositories.enabled=true # if spring data repository support is enabled&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Yaml/TOML===&lt;br /&gt;
Yaml好像很流行的样子，我们在springcloud的项目中大量使用，但是说实话这个格式我也不喜欢，为啥？&lt;br /&gt;
* 依赖于缩进，复制粘贴的时候麻烦了&lt;br /&gt;
* 语法有点复杂了&lt;br /&gt;
TOML感觉和YAML差不多，也挺复杂的样子。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Zuul&lt;br /&gt;
zuul:&lt;br /&gt;
  host:&lt;br /&gt;
    connect-timeout-millis: 50000&lt;br /&gt;
    socket-timeout-millis: 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Hystrix&lt;br /&gt;
hystrix:&lt;br /&gt;
  command:&lt;br /&gt;
    default:&lt;br /&gt;
      execution:&lt;br /&gt;
        isolation:&lt;br /&gt;
          thread:&lt;br /&gt;
            timeoutInMilliseconds: 10000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ini===&lt;br /&gt;
Windows所带来的格式，优点是可以带分组，好像比Properties文件更舒服一点，但是对于上面提到的缺点也有。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[curentUser]      ;  this is a Section&lt;br /&gt;
name=wisdo     ; this is Parameters&lt;br /&gt;
organization=cnblogs   ; this is Parameters&lt;br /&gt;
 &lt;br /&gt;
[database] &lt;br /&gt;
server=127.0.0.0   ; use IP address in case network name resolution is not working &lt;br /&gt;
port=143 &lt;br /&gt;
file = &amp;quot;user.dat&amp;quot; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JSON/LUA===&lt;br /&gt;
Json的缺点在于你要用很多个引号，同时最大的问题在于不支持注释。Lua可能是我最想用的脚本了，但是在Java中使用也比较麻烦，尤其是我想手写一个配置文件解析器，这样就麻烦了（主要是不会）。&lt;br /&gt;
&lt;br /&gt;
还有Ini + Json的方法，但是感觉也比较丑，于是想来想去，还不如按照自己的意愿发明一种配置文件格式好了，主要有以下的考虑：&lt;br /&gt;
* 语法应该简单，不需要依赖缩进&lt;br /&gt;
* 支持数组&lt;br /&gt;
* 支持使用变量（类似shell）&lt;br /&gt;
* 支持Unicode，中文直接写，所见即所得&lt;br /&gt;
* 支持某种形式的命名空间（类似ini中的section）来对配置进行分组&lt;br /&gt;
* 支持注释&lt;br /&gt;
* 支持多行字符串&lt;br /&gt;
* 格式好看...&lt;br /&gt;
&lt;br /&gt;
目前正在计划中，准备利用Antlr实现解析。&lt;/div&gt;</summary>
		<author><name>imported&gt;Riguz</name></author>
	</entry>
</feed>