75

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

请仅在您对框架有实际经验的情况下回复。我不是在寻找例子,而是在寻找经验......

4

14 回答 14

42

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

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

server.host=myHost
server.url=http://${server.host}/somePath
于 2008-08-29T14:52:01.777 回答
29

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

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

我使用属性文件在一个更大的项目中简单地配置小包,并作为整个项目的更全局配置,我从来没有遇到过问题。

当然,这具有不需要任何 3rd 方库来使用的巨大好处。

于 2008-08-25T08:23:22.227 回答
21

以下是各种选项:

您可能想阅读使用 JFig 和 JConfig 进行 Commons 配置的比较以及使用JFig 配置您的应用程序,以获得来自不同用户的一些反馈。

就个人而言,我使用过 jConfig,这是一次很好的体验。

于 2009-10-26T01:43:29.060 回答
6

公共配置

我们正在使用这个。单独的属性文件更容易处理,但如果您需要表示更复杂的数据公共配置,也可以执行此操作并读取您的属性文件。

如果您不做任何复杂的事情,我会坚持使用properites文件。

于 2008-08-25T14:09:17.323 回答
5

如果你想做一些高级的(和类型安全的),你可能想看看这个:http ://www.ibm.com/developerworks/java/library/j-configint/index.html

于 2008-10-28T06:53:48.663 回答
5

智能参数利用工具(InPUT, page )允许将几乎任何(硬编码)决策作为参数外部化到基于 XML 的配置文件中。它已于 2012 年初启动,作为对现有配置工具在通用性和关注点分离方面的感知缺陷的回应。

InPUT 可能比大多数用例所需的功能更强大,因为它允许独立于编程语言制定实验数据(输入 - 输出),具有诸如定义复杂描述符到类映射或基于基于预定义的值范围(用于测试和研究,例如蒙特卡洛模拟)。您可以定义带有子参数的参数,参数值的相对限制(数值参数 a > 参数 b)等。

它仍处于测试阶段,但相当稳定,我将它用于我的研究、实验的配置和文档以及教学目的。一旦它可用于其他语言(管道中的 C++ 适配器),其他研究人员/从业者可以重用描述符,在 C++ 中运行相同算法的实现(使用代码映射概念)。这样,可以验证实验结果/可以更轻松地迁移程序。该文档仍在工作中,但页面上提供了几个示例。InPUT 是开源软件。

对于那些感兴趣的人,概念研究论文

于 2012-08-31T14:01:54.360 回答
3

大多数时候,我倾向于使用java.util.Properties(或其他语言和框架中的类似类)包装在特定于应用程序的配置类中,但我对此的替代方案或变体非常感兴趣。特别是因为如果涉及图形配置对话框或配置数据的多个视图,事情可能会变得有点棘手。

不幸的是,我对 Java 的特定库没有任何经验(除了我自己编写的库),但任何指针都将不胜感激。

更新

好的。这并不完全正确,三是Spring Java 配置项目

于 2008-08-25T09:30:26.480 回答
2

几周前我写过这篇文章,得出的结论是 XML 是最广泛使用的表示法之一。

它是最好的吗?我不这么认为,我真的很喜欢 JSON,但是工具仍然不符合 XML,所以我想我们必须拭目以待。

于 2008-08-25T10:36:07.430 回答
1

你可以试试YamlBeans。这样你就可以编写任何你想保存配置数据的类,然后你可以自动将它们写入 YAML 和从 YAML 读取它们。

YAML 是一种人类可读的数据格式。它比 java.util.Properties 具有更强的表现力。你可以有列表、地图、锚点、输入数据等。

于 2009-12-22T23:26:05.040 回答
1

请看一下这个网址:http: //issues.apache.org/jira/browse/CONFIGURATION-394

我们正在寻找的配置框架是 Apache Commons 配置之上的东西,并且必须支持并发问题、JMX 问题和大多数存储(例如 .properties 文件、.xml 文件或 PreferencesAPI)。

weblogic 团队在“管理控制台”上提供的内容很有趣,通过它您可以对配置进行事务性(原子)更新,以便通知已注册的侦听器。

Apache 的家伙坚持认为这个项目超出了 Commons Configuration 的范围,也许吧!

我附上了一个简单的配置框架,请看一下。

于 2010-03-15T13:23:26.290 回答
1

我刚刚发布了一些关于使用 Spring 的 ClassPathResource 作为 IoC 替代方案的代码。ClassPathResource 允许您将属性文件放置在类路径上的任何位置(例如,全部放在一个位置,或者作为它们配置的代码的对等点。我的示例仅使用 java.util.Properties,因此您可以使用纯文本“name=value”样式或其 XML 格式。

于 2010-04-13T12:16:31.413 回答
0

属性文件非常简单,如果您需要更多功能,可以将一些配置文件格式化为 Java 类。这些可以放在不同的包/模块中,并且可以在运行时使用 BeanShell 之类的库进行预编译或加载。

注意:在最简单的情况下(预编译),您不需要任何额外的库。

于 2009-05-12T18:31:04.833 回答
0

关于使用 java.util.Properties 的建议 - 从 jdk 1.5 开始,Preferences API (java.util.prefs) 似乎是使用 Properties API 的首选替代方案。

原因:增加可扩展性、后端中立性等。

于 2009-06-16T22:27:53.497 回答
0

您可以查看新发布的 tools4j-config,其使命是让您在运行时轻松处理配置。

于 2012-02-01T21:34:46.753 回答