我在一个Java库,淘汰所有的硬编码值的过程中,不知道什么框架将是最好的(在零或近于零配置方面)来处理运行时配置?我更喜欢基于XML的配置文件,但它并不重要.
如果您对框架有实际经验,请仅回复.我不是在寻找例子,而是经验......
Apache Commons Configuration非常有用.它支持在后端上以各种格式存储配置,包括属性,XML,JNDI等.它易于使用和扩展.为了获得最大的灵活性,请使用工厂来获取配置,然后使用Configuration接口.
Commons Configuration的两个特性是通过直接的属性文件区分它,它支持自动转换为常见类型(int,float,String数组),并且它支持属性替换:
server.host=myHost
server.url=http://${server.host}/somePath
如果您的硬编码值只是简单的键值对,您应该查看java.util.Properties.它比xml简单得多,更易于使用,而且实现起来非常麻烦.
如果您在使用Java和数据要存储或从磁盘检索建模为一个键值对(这听起来好像是你的情况),那么我真的不能想象一个更好的解决方案.
我已经使用属性文件在一个更大的项目的小包装简单的配置,并作为一个整体项目更加全球化的配置,我从未有过与它的问题.
当然,这具有不需要任何第三方库来利用的巨大好处.
以下是各种选择:
java.util.Properties
java.util.prefs.Preferences(自Java 5起)
Commons配置
jConfig
JFig
Carbon的配置服务
你可能想读共享配置使用JFig和JConfig的比较和使用JFig配置您的应用程序从各种用户的一些反馈.
就个人而言,我使用过jConfig,这是一次很棒的体验.
Commons配置
我们正在使用这个.单独的属性文件更容易处理,但如果您需要表示更复杂的数据公共配置,则可以执行此操作并读取属性文件.
如果你没有做任何复杂的事情,我会坚持使用适当的文件.
如果你想做一些高级(和类型安全)的事情,你可能想看看这个:http://www.ibm.com/developerworks/java/library/j-configint/index.html
智能参数利用工具(InPUT,页面)允许将几乎任何(硬编码)决策外部化为基于XML的配置文件中的参数.它是在2012年初启动的,旨在回应现有配置工具在普遍性和关注点分离方面存在的缺陷.
InPUT可能比大多数用例需要的更强大,因为它允许编程语言独立地制定实验数据(输入 - 输出),具有诸如复杂描述符到类映射的定义或基于的随机化配置产生和验证的特征.预定义的值范围(用于测试和研究,例如蒙特卡罗模拟).您可以使用子参数,参数值的相对限制(数字参数a>参数b)等来定义参数.
它仍处于测试阶段,但相当稳定,我将它用于我的研究,实验的配置和记录以及教学目的.一旦它可用于其他语言(管道中的C++适配器),其他研究人员/从业者就可以重用在C++中运行相同算法实现的描述符(使用代码映射概念).这样,可以验证实验结果/可以更轻松地迁移程序.文档仍处于工作过程中,但页面上提供了几个示例.InPUT是开源软件.
对于那些感兴趣的人,概念研究论文.