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

仅当您有框架的实际经验时才回复。我不是在寻找例子,而是在寻找经验......

有帮助吗?

解决方案

如果您的硬编码值只是简单的键值对,您应该查看 java.util.Properties. 。它比 xml 简单得多,更容易使用,而且实现起来也非常简单。

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

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

当然,这有一个巨大的好处,那就是不需要使用任何第三方库。

其他提示

Apache 共享配置 效果很好。它支持在后端以多种格式存储配置,包括属性、XML、JNDI 等。它易于使用和扩展。为了获得最大的灵活性,请使用 工厂 获取配置并使用 配置界面 在那之后。

Commons Configuration 与直接属性文件的区别在于它支持自动转换为常见类型(int、float、String 数组),并且支持属性替换:

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

以下是各种选项:

您可能想阅读 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 配置 其使命是让您能够在运行时轻松处理配置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top