我们是否可以在.properties
文件中包含条件语句?
像:
if(condition1)
xyz = abc
else if(condition2)
xyz = efg
答案 0 :(得分:6)
否属性文件中没有这样的条件语句,您可能会在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想要的东西
答案 1 :(得分:6)
不,这是不可能的。文件格式免费提供: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");
}
答案 2 :(得分:3)
如果您的问题是针对不同环境的不同属性(例如devl,test,perf,prod),则常见解决方案是每个环境的属性文件的不同版本。将环境信息传达给您的应用,并查找文件名后附加正确名称的文件。
对于Spring来说是这样的:
Environment-specific configuration for a Spring-based web application?
答案 3 :(得分:3)
正如@Jigar所说,属性文件中没有条件逻辑。但你可以在那里有两条线,例如类似的东西:
xyz.condition1 = abs
xyz.condition2 = efg
并且,在访问该属性的代码中,将正确的条件附加到密钥。
答案 4 :(得分:0)
这是方式:
xyz[condition1]=abs
xyz[condition2]=efg