应用程序配置文件[关闭](Application configuration files [clos

2019-07-31 04:41发布

好了,我不想在这里开始神圣的战争,但我们在试图巩固我们处理我们的应用程序配置文件的方式来处理,我们正在努力使在最好的办法决定采取。 目前,我们每次分发应用程序使用它自己的ad-hoc配置文件,无论是属性文件(INI风格),XML或JSON(只是在一瞬间内部使用!)。

我们大部分的代码是Java的时刻,所以我们一直在寻找的Apache共享配置 ,但我们发现它是非常详细。 我们还看到了XMLBeans的 ,但好像很多faffing周围。 我也觉得好像我被推向XML的格式,但我的客户和同事都感到忧虑尝试别的东西。 我可以从客户的角度去理解它,每个人都听到了XML的,但在一天结束的时候,不应该使用的是合适的工具?

使用的是什么格式和图书馆的人在生产系统中的这些天,是任何人都试图避免尖括号税 ?

编辑:真正需要的是一个跨平台的解决方案:Linux上,Windows中,的Solaris等和图书馆的使用配置文件接口的选择是一样格式的选择同样重要。

Answer 1:

XML XML XML XML。 我们在这里谈论的配置文件 。 有没有“尖括号税”,如果你不是在表演,激烈的情况下序列化对象。

配置文件必须是人类可读和人类理解的,除了机器可读。 XML是两者之间的良好平衡。

如果你的店铺有人们害怕新奇的XML技术,我心疼你。



Answer 2:

YAML,原因很简单,它使对相比,XML非常可读的配置文件。

XML:

<user id="babooey" on="cpu1">
    <firstname>Bob</firstname>
    <lastname>Abooey</lastname>
    <department>adv</department>
    <cell>555-1212</cell>
    <address password="xxxx">ahunter@example1.com</address>
    <address password="xxxx">babooey@example2.com</address>
</user>

Yamla:

    babooey:
        computer : cpu1
        firstname: Bob
        lastname: Abooey
        cell: 555-1212
        addresses:
            - address: babooey@example1.com
              password: xxxx
            - address: babooey@example2.com
              password: xxxx

这些例子从这个网页采取: http://www.kuro5hin.org/story/2004/10/29/14225/062



Answer 3:

第一:这是一个非常大的争论问题,而不是一个快速的Q +一个。

我最喜欢的,现在是简单地包括Lua的 ,因为

  • 我可以允许之类的东西宽度=高度*(1 + 1/3)
  • 我可以使用自定义函数
  • 我可以禁止其他任何东西。 (不可能在,例如,Python的(包括泡菜。))
  • 我可能会想一个脚本语言在其他地方的项目呢。

另一种选择,如果有大量的数据是使用sqlite3的 ,因为他们是对权利要求

  • 小。
  • 快速。
  • 可靠。

选择任意三个。

对此我想补充:

  • 备份是易如反掌。 (刚才复制的数据库文件。)
  • 容易切换到另一个DB,ODBC,等等。 (比它从的fugly文件)

但同样,这是一个更大的问题。 一个“大”答案,这可能涉及某种特征矩阵或类似的情况列表:

数据的量,或短的运行时

  • 对于大量的数据,则可能需要高效的存储,就像一个分贝。
  • 对于短期运行(常),你可能想要的东西,你不需要做解析对于很多,考虑的东西,可以是MMAP:编辑直接。

什么是配置涉及到?

  • 主办:
    • 我喜欢YAML在/ etc。 是在Windows重新实现?
  • 用户:
    • 你允许用户编辑文本编辑器的配置?
    • 它应该是集中管理? 注册/的gconf /远程数据库?
    • 可在用户有几种不同的配置文件
  • 项目:
    • 文件(S)在项目目录? (版本控制通常遵循这种模式......)

复杂

  • 只是有几个平值? 考虑YAML。
  • 在数据嵌套,或依赖以某种方式? (这是它变得有趣。)
  • 也许这是一个理想的功能,允许某种形式的脚本?
  • 模板可以被看作是一种配置文件..


Answer 4:

不启动新的圣战中,“尖括号税”后的情绪是一个领域,我majorly与杰夫不同意 。 有没有错,XML,这是合理的人类可读的(高达YAML或JSON或INI文件),但请记住它的意图是由机器读取。 大多数语言/框架连击配备了某种自由的XML解析器,这使得XML一个相当不错的选择。

此外,如果您使用的是良好的IDE如Visual Studio,如果XML配备了一个模式,你可以给架构VS和神奇您获得智能(你可以得到一个NHibernate的举例)。

Ulimately你需要想想你打算如何往往是在生产一旦接触这些文件,可能不是经常。

这仍然说,这一切对我来说XML和为什么它仍然是配置文件的有效选择(从蒂姆·布雷 ):

“如果你想提供接收器可能想要做不可预见的怪异而疯狂的事情,或通用的数据,如果你想成为真正的偏执和挑剔的国际化,或者如果你要发送更像是一个比文件一个结构,或者如果数据事项的顺序,或者如果数据有可能长期存在(如,超过秒以上)XML是要走的路。这也我看来,XML和XPath的组合击中甜蜜点对于那些需要可扩展的数据格式;也就是说,这是很容易写XML处理代码,不会改变不碰你在乎那条消息格式的存在失败。 “



Answer 5:

@Guy

但是,应用程序配置并不一定只是键/值对。 看看像什么端口,它侦听Tomcat配置。 下面是一个例子:

    <Connector port="80" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />


    <Connector port="8009" 
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

你可以有任何数量的连接器。 定义更多的文件和多个连接器存在。 不要定义任何更多的并没有更多的存在。 有没有什么好办法(恕我直言)做,与普通的旧键/值对。

如果您的应用程序的配置很简单,那么简单的东西像是一个读入字典INI文件可能是罚款。 但是,对于像服务器配置更加复杂,INI文件将是一个巨大的痛苦,以保持和更多的东西像结构XML或YAML会更好。 这一切都取决于问题集。



Answer 6:

我们使用INI风格的配置文件。 我们使用妮妮库来管理它们。 妮妮使得它非常容易使用。 妮妮是orignally为.NET,但它已经被移植到使用单声道其他平台。



Answer 7:

XML,JSON,INI。
他们都有自己的长处和短处。
在应用程序方面,我觉得抽象层是最重要的事情。
如果可以选择的方式来结构是人类可读性和如何要在代码访问/抽象的数据之间的良好的中间地带的数据,你是金色的。

我们主要使用XML,我的工作,我真的不能相信,一个配置文件加载到高速缓存中的对象时,首先读或已被写入后,再提取从程序的休息了,真的是这么多的无论CPU还是磁盘空间上很受欢迎。
它是相当可读过,只要你结构中的文件正确。

和所有语言在所有平台上支持XML通过一些很常见的库。



Answer 8:

@Herms

我真正想说的是坚持推荐的方法软件应存储的配置值对于任何给定的平台。

你经常会得到那么也推荐的方式,这些应该/可以修改。 就像在程序配置菜单或“系统首选项”应用程序(系统服务软件即)的配置面板。 不要让最终用户直接通过注册表编辑器或记事本修改它们...

为什么?

  1. 最终用户(=客户)用于其平台
  2. 系统备份可以更好地保存“安全设置”等

@ninesided

关于“ 库的选择 ”,试图链接的(静态链接),任何选择的库,以降低进入最终用户机器上的版本冲突,战争的风险。



Answer 9:

如果您的配置文件是写一次,只读的,启动时,你的数据是一串名字值对的,你最好的选择是一个开发者可以得到第一份工作。

如果你的数据是一个比较复杂,嵌套等,你可能有YAML,XML或SQLite的更好。

如果您需要嵌套的数据和/或启动后查询配置数据的能力,使用XML或SQLite的。 两者都有结构化/嵌套数据相当不错的查询语言(XPath和SQL)。

如果您的配置数据是高度标准化(例如5范式)你使用SQLite更好了,因为SQL是处理高度规范化的数据更好。

如果你计划写入配置数据的程序,在工作时,那么你最好使用SQLite去。 例如,如果你从另一台计算机下载配置数据,或者如果你是立足于在以前的程序执行收集的数据今后的计划执行的决定。 SQLite的实现非常强大的数据存储引擎,当你有停电或挂在不一致的状态,由于错误的程序,是腐败的极端困难。 腐败的数据导致高的现场支持的成本,和SQLite会比任何土生土长的解决方案,甚至风靡全世界XML或YAML库好得多。

看看我的网页上SQLite的更多信息。



Answer 10:

据我所知,Windows注册表不再是如果你使用的是.NET存储配置的首选方式 - 大多数的应用程序现在使用System.Configuration [1,2]。 由于这也是基于XML的似乎是一切都在使用XML配置的方向移动。

如果你想保持跨平台的,我会说,使用某种形式的文本文件的是去的最佳途径。 至于说,文件的格式,你可能想,如果人类将要被操纵或不考虑。 XML似乎有点更友好的手动操作比INI文件,由于文件的可见结构。

至于角度支架税 - 我不担心过于频繁的XML库充分抽象它的照顾。 这可能是一个考虑的唯一情况是,如果你有非常小的存储空间,每个字节计数工作。

[1] System.Configuration命名空间- http://msdn.microsoft.com/en-us/library/system.configuration.aspx

[2]在.NET中使用应用程序配置文件- http://www.developer.com/net/net/article.php/3396111



Answer 11:

我们使用属性文件,只是因为Java本身支持他们。 几个月前,我看到了SpringSource的应用平台使用JSON来配置自己的服务器,它看起来很有趣。 我比较各种配置的符号 ,来到该XML似乎是目前最适合的结论。 它有很好的工具支持,是相当独立的平台。



Answer 12:

回复:epatel的评论

我认为原来的问题是问关于管理员也可以做,不只是存储用户偏好设置应用程序配置。 你给我的建议,似乎更多的用户首选项比应用程序配置,而不是一般用户将永远直接处理(应用程序应提供用户界面中的配置选项,然后更新文件)的东西。 我真的希望你永远不会让用户有查看/编辑注册表。 :)

至于实际的问题,我会说,XML可能是好的,因为很多人将被用于使用进行配置。 只要您安排在一个简单的配置值使用的方式,则“尖括号税”应该不会太差。



Answer 13:

也许这里有点切线的,但我的看法是,配置文件应该被读入一个键值字典/哈希表,当应用程序第一次启动时,总​​是通过这个对象访问从此速度。 通常,键/值表开始了作为字符串对象中的字符串,但辅助功能做的事情,日期时间GetConfigDate(字符串键)等...



Answer 14:

我认为,唯一重要的是要选择你喜欢,可以快速浏览的格式。 XML和JSON都好格式CONFIGS和广泛支持 - 技术实现不是在问题的关键所在,记错。 这是什么使的配置文件的任务更容易为你100%。

我已经开始使用JSON,因为我的工作相当多的与它作为数据传输格式,以及串行可以很容易地加载到任何开发框架。 我觉得JSON比XML更易于阅读,这使得处理多个服务,每个服务使用相当频繁修改配置文件,对我那么多easer!



Answer 15:

什么平台你的工作吗? 我建议你尝试使用首选/常用的方法吧。

  1. MacOSX的 - 的Plist
  2. Win32的 - 注册表(或者有一个新的位置,长久以来我就可以开发)
  3. 的Linux / Unix - 〜/ .apprc(名称值也许)


文章来源: Application configuration files [closed]