简体   繁体   English

如何在Java中仅加载一次属性?

[英]How to load Properties only once in java?

I have loaded property file in java. 我已经在Java中加载了属性文件。

public String getproperties(String property)
    InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
            Properties testProperties = new Properties();
            testProperties.load(inputStream);
            inputStream.close();
            return testProperties.getProperty(propertyType);

}

Its loaded successfully.The problem is every time property file loaded instead of loading only once. 它已成功加载。问题是每次加载属性文件而不是仅加载一次。 How to achieve this? 如何实现呢?

Store the Properties object as a field outside the method, initially null, and only create it on first call: 将Properties对象存储为方法外部的字段,最初为null,仅在首次调用时创建它:

private Properties testProperties = null;

public String getproperties(String property)
    if (testProperties == null) {
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
        testProperties = new Properties();
        testProperties.load(inputStream);
        inputStream.close();
    }
    return testProperties.getProperty(propertyType);
}

You can easily cache the properties by doing something like this: 您可以通过执行以下操作轻松地缓存属性:

class PropertyContainer {
    private static Properties properties;
    public static synchronized Properties getProperties() {
        if (properties != null) { return properties; }
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
        properties = new Properties();
        properties.load(inputStream);
        inputStream.close();
    }
}

Your old getproperties method would then be something like this: 您的旧getproperties方法将如下所示:

return PropertyContainer.getProperties().getProperty(propertyType);

This of course assumes that you only need one property file. 当然,这假设您只需要一个属性文件。

只需创建类字段的Properties属性即可:)并在其中保存一次加载的值。

I usually wrap this into a private method, storing the object into a private field: 我通常将其包装到一个私有方法中,将该对象存储到一个私有字段中:

private Properties _testProperties;
private Properties properties() {
  if (_testProperties == null) {
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
       _testProperties = new Properties();
        inputStream.close();
       _testProperties.load(inputStream);
  }
  return _testProperties ;
}

public String getproperties(String property) {
   return properties().getProperty(property);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM