如何在java中只加载一次属性?
我已经用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
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方法。非常正确。这一点现在已经改变。