Java配置框架

时间:2020-03-05 18:42:44  来源:igfitidea点击:

我正在淘汰Java库中的所有硬编码值,并且想知道哪种框架最适合处理运行时配置(就零或者接近零配置而言)?我希望使用基于XML的配置文件,但这不是必需的。

如果我们有框架方面的实践经验,请仅作答复。我不是在寻找示例,而是在体验...

解决方案

回答

如果硬编码值只是简单的键值对,则应查看java.util.Properties。它比xml简单得多,易于使用,并且实现起来很麻烦。

如果我们正在使用Java,并且将从磁盘存储或者检索的数据建模为键值对(听起来像是情况),那么我真的无法想象有更好的解决方案。

我已经使用属性文件来对较大项目中的小程序包进行简单配置,并且对整个项目进行了更全局的配置,但我从未遇到过问题。

当然,这具有不需要任何第三方库就可以使用的巨大好处。

回答

大多数时候,我倾向于使用包装在特定于应用程序的配置类中的java.util.Properties(或者其他语言和框架中的类似类),但是我对此的替代方案或者变体非常感兴趣。尤其是如果涉及图形配置对话框或者有关配置数据的多个视图,事情可能会变得有些棘手。

不幸的是,我对Java的特定库没有任何经验(除了我自己编写的库以外),但是任何指针都将不胜感激。

更新

好的。这并非完全正确,三个是Spring Java Configuration Project。

回答

几周前,我写了这篇文章,得出的结论是XML是使用最广泛的表示法之一。

是最好的吗?我不这么认为,我真的很喜欢JSON,但是该工具仍然无法使用XML,因此我想我们必须拭目以待。

回答

共用配置

我们正在使用这个。单独使用属性文件更容易处理,但是如果我们需要表示更复杂的数据公共配置,则可以执行此操作并读取属性文件。

如果我们没有做任何复杂的事情,我会坚持使用属性文件。

回答

Apache Commons Configuration很好用。它支持将配置以各种格式存储在后端,包括属性,XML,JNDI等。它易于使用和扩展。为了获得最大的灵活性,请使用工厂来获取配置,然后再使用Configuration接口。

Commons Configuration的两个功能使它与直接的Properties文件不同,它支持自动转换为常见类型(int,float,String数组),并且支持属性替换:

server.host=myHost
server.url=http://${server.host}/somePath

回答

如果我们想做一些高级的(并且类型安全的),我们可能需要看一下:http://www.ibm.com/developerworks/java/library/j-configint/index.html

回答

属性文件非常简单,如果我们需要更多功能,则可以将某些配置文件格式化为Java类。它们可以放置在不同的包/模块中,并且可以在运行时使用BeanShell之类的库进行预编译或者加载。

注意:在最简单的情况下(预编译),我们不需要任何其他库。

回答

关于从jdk 1.5开始使用java.util.Properties的建议,首选项API(java.util.prefs)似乎是使用Properties API的首选替代方法。

原因:增加了可伸缩性,后端中立性等。

回答

以下是各种选项:

  • java.util.Properties
  • java.util.prefs.Preferences(从Java 5开始)
  • 共用配置
  • 的jConfig
  • 无花果
  • Carbon的配置服务

我们可能需要阅读"使用JFig和JConfig进行公共配置比较"以及"使用JFig配置应用程序"以获得来自不同用户的一些反馈。

就个人而言,我使用过jConfig,这是一个很好的体验。

回答

我们可以尝试YamlBeans。这样,我们可以编写要保存配置数据的任何类,然后可以自动将它们写入YAML和从YAML中读取它们。

YAML是一种人类可读的数据格式。它比java.util.Properties具有更多的表达能力。我们可以拥有列表,地图,锚点,键入的数据等。

回答

请查看以下URL:
http://issues.apache.org/jira/browse/CONFIGURATION-394

我们正在寻找的Configuration框架是Apache Commons Configuration的基础,并且必须支持并发问题,JMX问题和大多数存储(例如.properties文件,.xml文件或者PreferencesAPI)。

weblogic团队在"管理控制台"上提供的功能很有趣,我们可以通过它在配置上进行事务性(原子性)更新,以便通知已注册的侦听器。

Apache的人坚持认为,这个项目可能不在Commons Configuration的范围之内!

我已经附上了一个简单的配置框架,请看一下。

回答

我刚刚发布了有关使用Spring的ClassPathResource替代IoC的简短代码。 ClassPathResource允许我们将属性文件放置在类路径上的任何位置(例如,全部放置在一个位置,或者作为它们配置的代码的对等体。)我的示例仅使用java.util.Properties,因此可以使用纯文本" name = value"样式或者其XML格式。