首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中从配置文件中读取配置参数的最佳方式是什么?

在Java中从配置文件中读取配置参数的最佳方式是什么?
EN

Stack Overflow用户
提问于 2014-11-13 20:25:53
回答 10查看 49.3K关注 0票数 28

让我们假设直到运行时我们还不知道配置的细节是什么(用户可能需要在运行应用程序之前在config文件中配置这些参数。

我想要读取这些配置细节,并需要在我的应用程序中需要它们的任何地方重用它们。为此,我希望将它们设置为全局常量(public static final)。

所以,我的疑问是,如果我直接从所需的类读取config文件,是否会有任何性能影响?因为,运行时值不能直接放在单独的Interface中。

我认为这将影响performance.Please建议我做这件事的更好的方法。

更新:我可以使用单独的最终类来获取配置细节吗?将所有配置详细信息作为常量放在单独的public final class

(从配置文件中一次读取所有配置详细信息,并将其存储为全局常量,以便以后在应用程序中使用)

EN

回答 10

Stack Overflow用户

发布于 2014-11-20 04:11:23

你听说过apache commons configuration http://commons.apache.org/proper/commons-configuration/吗?它是我找到的最好的配置阅读器,甚至在我的应用程序中使用它,该应用程序已经在生产中运行了一年。从来没有发现任何问题,非常容易理解和使用,很好的性能。我知道这对你的应用程序有点依赖,但相信我,你会喜欢的。

你所要做的就是

代码语言:javascript
复制
Configuration config = new ConfigSelector().getPropertiesConfiguration(configFilePath);
String value = config.getString("key");
int value1 = config.getInt("key1");
String[] value2 = config.getStringArray("key2");
List<Object> value3 = config.getList("key3");

就是这样。您的配置对象将保存所有配置值,您可以将该对象传递给任意数量的类。有了这么多有用的方法,你可以提取你想要的任何类型的密钥。

票数 24
EN

Stack Overflow用户

发布于 2014-11-13 20:31:49

如果您将它们放在一个属性文件中,并在应用程序启动时读取该文件,并将所有参数初始化为系统parameters(System.setProperty),然后在代码中定义常量,则只需一次时间开销

代码语言:javascript
复制
public static final String MY_CONST = System.getProperty("my.const");

但要确保在加载任何其他类之前在应用程序启动时进行初始化。

票数 5
EN

Stack Overflow用户

发布于 2014-11-24 23:41:18

有不同类型的配置。

通常需要某种引导配置,例如连接到数据库或服务,才能启动应用程序。指定数据库连接参数的J2EE方式是通过在容器的JNDI注册表(Glassfish、JBoss、Websphere等)中指定的“数据源”。然后在您的persistence.xml中按名称查找此数据源。在非J2EE应用程序中,更常见的是在Spring上下文甚至.properties文件中指定它们。在任何情况下,您通常都需要一些东西来将您的应用程序连接到某种数据存储。

在引导到数据存储之后,一个选项是管理此数据存储中的配置值。例如,如果您有一个数据库,您可以为配置值使用单独的表(例如,由应用程序中的JPA实体表示)。如果你不想/不需要这种灵活性,你可以使用简单的.properties文件来实现。在Java (ResourceBundle)和像Spring这样的框架中对.properties文件有很好的支持。普通的ResourceBundle只加载一次属性,Spring helper提供可配置的缓存和重新加载(这有助于您提到的性能方面)。注意:您还可以使用由数据存储支持的属性,而不是文件。

通常,这两种方法在应用程序中共存。在已部署的应用程序中从不更改的值(如应用程序名称)可以从属性文件中读取。可能需要由应用程序维护者在运行时更改而无需重新部署的值(例如,会话超时间隔)可能更好地保存在可重新加载的.properties文件或数据库中。可以由应用程序的用户更改的值应该保存在应用程序的数据存储中,并且通常有一个应用程序中的屏幕来编辑它们。

所以我的建议是将你的配置设置分成不同的类别(例如引导、部署、运行时和应用程序),并选择一种适当的机制来管理它们。这也取决于您的应用程序的范围,即它是J2EE web应用程序、桌面应用程序、命令行实用程序还是批处理进程?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26908854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档