我正在淘汰Java库中的所有硬编码值,并且想知道哪种框架最好(就零或接近零的配置而言)来处理运行时配置?我希望使用基于XML的配置文件,但这不是必需的。
如果您有框架方面的实践经验,请仅作答复。我不是在寻找例子,而是经验……
我正在淘汰Java库中的所有硬编码值,并且想知道哪种框架最好(就零或接近零的配置而言)来处理运行时配置?我希望使用基于XML的配置文件,但这不是必需的。
如果您有框架方面的实践经验,请仅作答复。我不是在寻找例子,而是经验……
Answers:
如果您的硬编码值只是简单的键值对,则应查看java.util.Properties。它比xml简单得多,易于使用,并且实现起来很麻烦。
如果您正在使用Java,并且将从磁盘存储或检索的数据建模为键值对(听起来像是您的情况),那么我真的无法想象有更好的解决方案。
我已经使用属性文件来对较大项目中的小程序包进行简单配置,并且对整个项目进行了更全局的配置,而我从来没有遇到过问题。
当然,这具有不需要任何第三方库就可以使用的巨大好处。
Apache Commons Configuration很好用。它支持将配置以各种格式存储在后端,包括属性,XML,JNDI等。它易于使用和扩展。为了获得最大的灵活性,请使用工厂来获取配置,然后再使用Configuration接口。
Commons Configuration的两个功能使它与直接的Properties文件不同,它支持自动转换为常见类型(int,float,String数组),并且支持属性替换:
server.host=myHost
server.url=http://${server.host}/somePath
以下是各种选项:
你可能想读共享配置使用JFig和JConfig的比较和使用JFig配置您的应用程序从各种用户的一些反馈。
就个人而言,我使用过jConfig,这是一个很好的体验。
如果您想做一些高级的(并且类型安全的),您可能需要看一下:http : //www.ibm.com/developerworks/java/library/j-configint/index.html
智能参数利用工具(InPUT,page)允许将几乎所有(硬编码)决策作为参数外部化到基于XML的配置文件中。它是在2012年初启动的,旨在应对现有配置工具在普遍性和关注点分离方面的不足。
InPUT可能比大多数用例所需的功能更强大,因为它允许以编程语言独立地表示实验数据(输入-输出),并具有诸如复杂描述符到类映射的定义或基于以下内容的随机配置生成和验证等功能预定义的值范围(用于测试和研究,例如蒙特卡洛模拟)。您可以定义带有子参数的参数,对参数值的相对限制(数字参数a>参数b)等。
它仍处于测试阶段,但相当稳定,我将其用于研究,实验的配置和文档以及教学目的。一旦可用于其他语言(管道中的C ++适配器),其他研究人员/从业人员就可以重用运行C ++中相同算法实现的描述符(使用代码映射概念)。这样,可以验证实验结果/可以更轻松地迁移程序。该文档仍在工作中,但是该页面上有几个示例。InPUT是开源软件。
对于那些感兴趣的人,概念研究论文。
大多数时候,我倾向于使用包装在特定于应用程序的配置类中的java.util.Properties
(或其他语言和框架中的类似类),但是我对此的替代方案或变体非常感兴趣。特别是如果涉及图形配置对话框或有关配置数据的多个视图,事情可能会变得有些棘手。
不幸的是,我对Java的特定库没有任何经验(除了我自己编写的库以外),但是任何指针都将不胜感激。
更新资料
好。并非完全如此,其中三个是Spring Java Configuration Project。
请查看以下URL:http : //issues.apache.org/jira/browse/CONFIGURATION-394
我们正在寻找的Configuration框架是Apache Commons Configuration之上的东西,必须支持并发问题,JMX问题和大多数存储(例如.properties文件,.xml文件或PreferencesAPI)。
weblogic团队在“管理控制台”上提供的功能很有趣,您可以通过它在配置上进行事务性(原子性)更新,以便通知已注册的侦听器。
Apache的人坚持认为,这个项目可能不在Commons Configuration的范围之内!
我已经附上了一个简单的配置框架,请看看。
关于使用java.util.Properties的建议-从jdk 1.5开始,首选项API(java.util.prefs)似乎是使用Properties API的首选替代方法。
原因:增加了可伸缩性,后端中立性等。
您可以看一下新发布的tools4j-config,其任务是允许您在运行时轻松处理配置。