有没有办法可以在
.properties
文件中包含条件语句?
喜欢:
if(condition1)
xyz = abc
else if(condition2)
xyz = efg
不,这是不可能的。文件格式可免费获取:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29.
在 Java 代码中执行此操作:
if (condition1) {
return properties.getProperty("xyz.1");
}
else if (condition2) {
return properties.getProperty("xyz.2");
}
否属性文件中没有这样的条件语句,也许你会在
Properties
上编写一个包装器来封装你的逻辑
示例:
class MyProperties extends Properties {
/**
*
*
*
* @param key
* @param conditionalMap
* @return
*/
public String getProperty(String key, List<Decision> decisionList) {
if (decisionList == null) {
return getProperty(key);
}
Long value = Long.parseLong(getProperty(key));
for (Decision decision : decisionList) {
if (Condition.EQUALS == decision.getCondition() && decision.getValue().equals(value)) {
return getProperty(decision.getTargetKey());
}
}
return super.getProperty(key);
}
}
和
enum Condition {
EQUALS, GREATER, LESSER
}
和
class Decision {
Condition condition;
String targetKey;
Long value;
//accessor
public Condition getCondition() {
return condition;
}
public void setCondition(Condition condition) {
this.condition = condition;
}
public String getTargetKey() {
return targetKey;
}
public void setTargetKey(String targetKey) {
this.targetKey = targetKey;
}
}
所以现在例如如果你想读取属性文件,获取年龄类别,如果它大于0且小于10则读取
kid
所以也许你可以通过这些条件的列表,
注意:这个设计可以进行很大的改进(不是好的设计),它只是为了说明如何包装属性并添加OP想要的东西
如果您的问题是不同环境的不同属性(例如 devl、test、perf、prod),则常见的解决方案是为每个环境使用不同版本的属性文件。将环境信息传达给您的应用程序,并查找文件名附加了正确名称的文件。
春天是这样的:
正如@Jigar所说,属性文件中没有条件逻辑。但你可以在那里有两行,例如像这样的东西:
xyz.condition1 = abs
xyz.condition2 = efg
并且,在访问该属性的代码中,将适当的条件附加到密钥。
就是这样:
xyz[condition1]=abs
xyz[condition2]=efg
创建不同的属性,如 application-dev1.properties、application-dev2.properties、application-prod1.properties 和 application-prod2.properties 文件,然后通过设置启用/禁用文件:
spring.profiles.active=dev1
#spring.profiles.active=dev2
#spring.profiles.active=prod1
#spring.profiles.active=prod2
在 application.properties 文件中 详细信息如下: https://devtut.github.io/spring/create-and-use-of-multiple-application-properties-files.html#dev-and-prod-environment-using- different-datasources