Java配置框架[关闭]
-
09-06-2019 - |
题
我正在清除 Java 库中的所有硬编码值,并且想知道哪种框架最适合处理运行时配置(就零或接近零配置而言)?我更喜欢基于 XML 的配置文件,但这不是必需的。
仅当您有框架的实际经验时才回复。我不是在寻找例子,而是在寻找经验......
解决方案
如果您的硬编码值只是简单的键值对,您应该查看 java.util.Properties. 。它比 xml 简单得多,更容易使用,而且实现起来也非常简单。
如果您正在使用 Java 并且您正在存储或从磁盘检索的数据被建模为键值对(听起来就像您的情况),那么我真的无法想象更好的解决方案。
我已经使用属性文件在较大的项目中对小包进行简单配置,并作为整个项目的更全局的配置,并且我从未遇到过问题。
当然,这有一个巨大的好处,那就是不需要使用任何第三方库。
其他提示
Apache 共享配置 效果很好。它支持在后端以多种格式存储配置,包括属性、XML、JNDI 等。它易于使用和扩展。为了获得最大的灵活性,请使用 工厂 获取配置并使用 配置界面 在那之后。
Commons Configuration 与直接属性文件的区别在于它支持自动转换为常见类型(int、float、String 数组),并且支持属性替换:
server.host=myHost
server.url=http://${server.host}/somePath
以下是各种选项:
- java.util.Properties
- java.util.prefs.Preferences(自 Java 5 起)
- 公共配置
- j配置
- J图
- Carbon的配置服务
您可能想阅读 JFig 和 JConfig 的 Commons 配置比较 和 使用 JFig 配置您的应用程序 来自不同用户的一些反馈。
就我个人而言,我使用过 jConfig,这是一次很好的体验。
如果你想做一些高级的(并且类型安全的)事情,你可能想看看这个: http://www.ibm.com/developerworks/java/library/j-configint/index.html
智能参数利用工具 (输入, 页) 允许 将几乎所有(硬编码)决策作为参数外部化到基于 XML 的配置文件中。 它于 2012 年初启动,作为对现有配置工具在通用性和关注点分离方面存在的缺陷的回应。
InPUT 可能比大多数用例所需的功能更强大,因为它允许 独立于编程语言的表述 实验数据(输入 - 输出),具有诸如定义之类的特征 复杂描述符到类的映射, ,或基于预定义值范围的随机配置生成和验证(用于测试和研究,例如蒙特卡洛模拟)。你可以 定义带有子参数的参数,参数值的相对限制(数值param a > param b) ETC。。
它仍处于测试阶段,但相当稳定,我用它来进行研究 实验的配置和记录,以及用于教学目的. 。一旦它可用于其他语言(管道中的 C++ 适配器),其他研究人员/从业者就可以重用在 C++ 中运行相同算法实现的描述符(使用代码映射概念)。那样, 实验结果可以得到验证/程序可以更容易地迁移. 。该文档仍在工作过程中,但有一些 示例可用 在页面上。输入是 开源 软件。
对于那些有兴趣的人来说, 概念研究论文.
我倾向于使用 java.util.Properties
(或其他语言和框架中的类似类) 包装在特定于应用程序的配置类中 大多数时候,但我对替代方案或变体非常感兴趣。特别是如果涉及图形配置对话框或配置数据的多个视图,事情可能会变得有点棘手。
不幸的是,我对 Java 的特定库没有任何经验(除了我自己编写的库),但任何指示将不胜感激。
更新
好的。这并不完全正确,三是 Spring Java配置项目.
我 写道 几周前讨论过这个问题并得出结论:XML 是使用最广泛的符号之一。
这是最好的吗?我不这么认为,我真的很喜欢 JSON,但工具仍然达不到 XML,所以我想我们必须拭目以待。
你可以试试 YamlBeans. 。通过这种方式,您可以编写想要保存配置数据的任何类,然后可以自动在 YAML 中写入和读取它们。
YAML 是一种人类可读的数据格式。它比 java.util.Properties 具有更强的表达能力。您可以拥有列表、地图、锚点、键入的数据等。
请看一下这个网址: http://issues.apache.org/jira/browse/CONFIGURATION-394
我们正在寻找的配置框架是 Apache Commons 配置之上的东西,并且必须支持并发问题、JMX 问题和大多数存储(例如 .properties 文件、.xml 文件或 PreferencesAPI)。
weblogic 团队在“管理控制台”上提供的内容很有趣,通过它您可以对配置进行事务(原子)更新,以便通知注册的侦听器。
Apache 的家伙坚持认为这个项目超出了 Commons Configuration 的范围,也许吧!
我附上了一个简单的配置框架,请看一下。
我刚刚发布了一个简短的内容 代码 关于使用 Spring 的 ClassPathResource 作为 IoC 的替代品。ClassPathResource 允许您将属性文件放置在类路径上的任何位置(例如,全部放置在一个位置,或者作为它们配置的代码的对等体)。我的示例仅使用 java.util.Properties,因此您可以使用纯文本“name=value”样式或其 XML 格式。
属性文件非常简单,如果您需要更多功能,您可以将一些配置文件格式化为 Java 类。它们可以放置在不同的包/模块中,并且可以使用 BeanShell 等库在运行时进行预编译或加载。
笔记:在最简单的情况下(预编译),您不需要任何额外的库。
关于使用 java.util.Properties 的建议 - 从 jdk 1.5 开始,首选项 API (java.util.prefs) 似乎是使用 Properties API 的首选替代方案。
理由:提高可扩展性、后端中立性等。
你可以看看新发布的 tools4j 配置 其使命是让您能够在运行时轻松处理配置。