如何在java中只加载一次属性?

如何在java中只加载一次属性?,java,properties,Java,Properties,我已经用java加载了属性文件 public String getproperties(String property) InputStream inputStream = new ClassPathResource("test.properties").getInputStream(); Properties testProperties = new Properties(); testProperties.load(inputStrea

我已经用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);

}
已成功加载。问题是每次加载属性文件而不是只加载一次。
如何实现这一点?

将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);
}

将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);
}

只需创建类字段属性:)
并在加载值后将其保存。

只需创建类字段属性:)
并在加载值后将其保存。

您可以通过以下操作轻松缓存属性:

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();
    }
}
return PropertyContainer.getProperties().getProperty(propertyType);
您以前的
getproperties
方法将是这样的:

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();
    }
}
return PropertyContainer.getProperties().getProperty(propertyType);

当然,这假设您只需要一个属性文件。

您可以通过执行以下操作轻松缓存属性:

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();
    }
}
return PropertyContainer.getProperties().getProperty(propertyType);
您以前的
getproperties
方法将是这样的:

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();
    }
}
return PropertyContainer.getProperties().getProperty(propertyType);

当然,这假设您只需要一个属性文件。

我通常将其包装到私有方法中,将对象存储到私有字段中:

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);
}

我通常将其包装到私有方法中,将对象存储到私有字段中:

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);
}

在使用多线程应用程序的情况下,最好同步getProperties方法。非常正确。现在已经更改了。如果是多线程应用程序,最好同步getProperties方法。非常正确。这一点现在已经改变。