我可以多次从Apache PropertiesConfiguration读取相同的配置而不会失去性能吗?

时间:2014-09-19 07:01:12

标签: java performance apache properties

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

另一种方法是在我的类初始化期间将所有值读入Map中,并将其用于查找,但如果我可以避免这种情况而不会失去性能,我显然会(更少代码等)

由于

1 个答案:

答案 0 :(得分:1)

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

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

  • 从另一方面(我更喜欢),您必须在启动期间读取文件并将信息存储在应用程序缓存中(如HashMap等)。如果在您的应用程序中共享此缓存,您可以在任何所需的类中使用它,并且不会出现任何性能问题(但要注意并发访问,取决于您的实现)。
    另外,在这种情况下,您可以提供一些额外的有效管理屏幕,用于更改属性,例如,网页,并通过一些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>();

如果您将寻找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);
}

这是第二种情况,其中属性一次加载到地图中。我想如果你在其他类中需要“新鲜”属性,你必须再次配置它。