应用程序配置文件 [已关闭]

好吧,我不想在这里开始一场圣战,但我们正在尝试整合我们处理应用程序配置文件的方式,我们正在努力决定采取的最佳方法。目前,我们分发的每个应用程序都在使用自己的临时配置文件,无论是属性文件(ini样式),XML还是JSON(目前仅在内部使用!

目前,我们的大部分代码都是Java,所以我们一直在研究Apache Commons Config,但我们发现它非常冗长。我们还研究了 XMLBeans,但它似乎有很多麻烦。我也觉得我正在被推向XML作为一种格式,但我的客户和同事对尝试其他东西感到担忧。我可以从客户的角度理解它,每个人都听说过XML,但归根结底,不应该使用正确的工具来完成这项工作吗?

如今,人们在生产系统中使用什么格式和库,是否有其他人试图避免角括号税

编辑:真的需要一个跨平台的解决方案:Linux,Windows,Solaris等,用于与配置文件接口的库的选择与格式的选择一样重要。


答案 1

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>

YAML:

    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


答案 2

首先:这是一个非常大的辩论问题,而不是一个快速的问答。

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

  • 我可以允许诸如宽度=高度*(1 + 1 / 3)之类的东西
  • 我可以使自定义功能可用
  • 我可以禁止其他任何事情。(例如,在Python中是不可能的(包括泡菜。
  • 无论如何,我可能想要在项目中的其他地方使用脚本语言。

如果有很多数据,另一种选择是使用sqlite3,因为它们是正确的

  • 小。
  • 快。
  • 可靠。

选择任意三个。

我想补充一点:

  • 备份是一个快照。(只需复制 db 文件即可。
  • 更容易切换到另一个数据库,ODBC,等等。(比它来自模糊文件)

但同样,这是一个更大的问题。对此的“大”答案可能涉及某种功能矩阵或情况列表,例如:

数据量或运行时间短

  • 对于大量数据,您可能需要高效的存储,如数据库。
  • 对于短期运行(通常),您可能想要一些不需要进行大量解析的东西,请考虑可以直接进行mmap:ed的东西。

配置与哪些内容相关?

  • 主机:
    • 我喜欢 YAML 中的 /etc。这是否在窗口中重新实现?
  • 用户:
    • 是否允许用户使用文本编辑器编辑配置?
    • 它应该是集中管理的吗?注册表 / gconf / 远程数据库?
    • 用户可能有多个不同的配置文件吗
  • 项目:
    • 项目目录中的文件?(版本控制通常遵循此模型...)

复杂性

  • 只有几个平面值吗?以 YAML 为例。
  • 数据是嵌套的,还是以某种方式依赖的?(这就是它变得有趣的地方。
  • 允许某种形式的脚本编写是否是一个理想的功能?
  • 模板可以看作是一种配置文件。