Java配置框架
我正在淘汰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格式。