Java 我可以多次从Apache PropertiesConfiguration读取同一配置而不损失性能吗?

Java 我可以多次从Apache PropertiesConfiguration读取同一配置而不损失性能吗?,java,performance,apache,properties,Java,Performance,Apache,Properties,我有一个PropertiesConfiguration对象。我可以多次调用getInt()、getString()等而不关心性能吗?我的意思是,它不会每次都从文件中读取,或者以任何其他方式降低我的系统的性能 另一种方法是在初始化类时将所有值读入一个映射,并将其用于查找,但如果我可以避免这种情况而不降低性能,我显然会这样做(代码更少等) 谢谢您必须选择并优先考虑您的需求: 如果您有少量的请求,并且文件本身很小,那么每次需要属性时读取文件并不是一个大问题。它还使您能够在不重新启动应用程序的情况下

我有一个PropertiesConfiguration对象。我可以多次调用getInt()、getString()等而不关心性能吗?我的意思是,它不会每次都从文件中读取,或者以任何其他方式降低我的系统的性能

另一种方法是在初始化类时将所有值读入一个映射,并将其用于查找,但如果我可以避免这种情况而不降低性能,我显然会这样做(代码更少等)


谢谢

您必须选择并优先考虑您的需求:

  • 如果您有少量的请求,并且文件本身很小,那么每次需要属性时读取文件并不是一个大问题。它还使您能够在不重新启动应用程序的情况下更改属性(有时应该这样做)

  • 从另一方面(我更愿意),您必须在启动期间读取文件,并将信息存储在应用程序缓存中(如HashMap等)。如果此缓存在应用程序中共享,您可以在任何想要的类中使用它,并且不会出现任何性能问题(但要注意并发访问,这取决于您的实现)。
    此外,在这种情况下,您可以提供一些额外的管理屏幕,用于更改web页面的属性,并通过某个servlet“动态”更新缓存(使用属性更新缓存地图+使用属性更新文件,而无需重新启动应用程序))

如果您使用Apache Commons,如下所示:

Configuration config = new PropertiesConfiguration("usergui.properties");
如果您查看PropertiesConfiguration的源代码,您将在下面找到

/** stores the configuration key-value pairs */
private Map<String, Object> store = new LinkedHashMap<String, Object>();

这是第二种情况,属性只加载一次到映射中。我想如果您在其他类中需要“fresh”属性,您必须重新配置它。

好的,您是说每次我在PropertiesConfiguration对象上调用getString()等时,它都会从文件中读取?我想我希望它是第一次从文件中读取的,并且该值存储在内存中,直到我以某种方式触发配置以再次从文件中更新。我已经添加了为getInt()方法找到的信息。好的,谢谢。然后我可以回答标题中的问题是“是”。
/**
 * Read property from underlying map.
 *
 * @param key key to use for mapping
 *
 * @return object associated with the given configuration key.
 */
public Object getProperty(String key)
{
    return store.get(key);
}