有趣的是,有两个几乎完全相同的问题,我发现了类似的标题:
然而,我的情况似乎略有不同。所以我有一个由config.properties
类加载的ConfigurationGetter
文件,如下所示:
public class ConfigurationGetter {
Properties prop = new Properties();
InputStream inputStream = null;
public Properties getPropValues() throws IOException {
try {
String fileName = "config.properties";
inputStream = getClass().getClassLoader().getResourceAsStream(fileName);
if (inputStream != null) {
prop.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + fileName + "' not found in the classpath");
}
} catch (Exception e) {
System.out.println("Exception: " + e);
} finally {
inputStream.close();
}
return prop;
}
然后我在另一个类中实例化这个类:
ConfigurationGetter config = new ConfigurationGetter();
props = config.getPropValues();
然后我可以按键提取属性:
props.getProperty("keyName")
我想要做的是覆盖我从属性文件获得的值,如果我通过命令行提供它。例如,如果我在我加载的config.properties
中有这样的一行,如上所述:
keyName=true
我也运行这样的代码:
mvn test -DkeyName=false
然后false
将被解决。
答案 0 :(得分:4)
加载属性文件后,我执行以下操作:
for (String propertyName : properties.stringPropertyNames()) {
String systemPropertyValue = System.getProperty(propertyName);
if (systemPropertyValue != null) {
properties.setProperty(propertyName, systemPropertyValue);
}
}
通过使用相应的系统属性值覆盖属性文件中的值(如果存在),可以为您提供所需的行为。