什么是可能的轻量级Java配置库来处理复杂的配置?

时间:2011-03-31 06:14:34

标签: java spring configuration-files

我需要为java应用程序处理一组相对复杂的配置参数。要求大致如下:

  • 包含列表,地图等的嵌套配置值 - 而不仅仅是普通键/值对
  • 多个配置文件,以后的配置文件可以智能地覆盖先前配置文件中的设置。
  • 对来自不同地方的同一配置项目的多次引用
  • 可继承的已配置对象,因此新对象可以复制先前对象的配置,只能更改特定内容
  • 新配置选项所需的代码非常少 - 最好的方法是将@Configurable注释添加到字段或类似的内容

现在,我知道Spring以某种方式实现了所有这些。然而,它有一些缺点,但没有致命的:

  • Spring并没有真正优化为配置语言,因为它更关注依赖注入
  • XML配置文件更多的意思是在JAR文件中提供,而不是由最终用户修改,所有可配置属性都通过单独的属性文件或类似文件引用 - 我需要配置文件完整,易于最终用户修改
  • 当有在线配置刷新而没有终止正在进行的连接时,以及需要单独的配置检查原语需要完全验证配置但实际上没有做任何事情时,Spring配置有点单调乏味

所以,我想问,你能想到任何符合我要求的替代方案吗?

我有点像YamlBeans,但缺少一些功能。

5 个答案:

答案 0 :(得分:10)

这个看起来很有趣,但我不得不承认我没有用它:

http://owner.aeonbits.org

答案 1 :(得分:9)

您是否已查看Apache Commons Configuration

答案 2 :(得分:5)

我们在项目中使用Constretto。非常轻巧,易于使用。

答案 3 :(得分:3)

您可以尝试cfg4j。它主要面向分布式应用程序,但支持大多数请求的功能。

答案 4 :(得分:1)

对于大多数要求,我已经能够使用标准属性完成此操作。我将一个Properties对象包装在一个配置类中,该类从以下位置读取属性文件:

  1. 一个普通的罐子
  2. “application”jar / classpath
  3. 文件系统(指定为JVM的-D属性)
  4. Configuration类代码使应用程序中的属性共同覆盖属性,文件系统属性覆盖应用程序级属性。

    配置作为Spring bean加载,并将其内部Properties对象公开给PropertyPlaceholderConfigurer,允许在Spring xml文件中进一步$var替换。由于配置是一个Spring bean,它可以在我需要的地方注入。

    这样的东西应该可以扩展到处理JSON或YAML文件而不是属性文件以允许地图,列表等。