我一直在尝试在公共配置中注册自定义配置插补器,默认情况下会处理一些回退值。
这是插补器的代码。
public class FallbackConfigurationInterpolator extends ConfigurationInterpolator {
Pattern p = Pattern.compile("\\d+$");
public FallbackConfigurationInterpolator() {
super();
}
@Override
public String lookup(String var) {
String value = super.lookup(var);
if (StringUtils.startsWith(value, "${") && endsWithDigits(var)) {
value = super.lookup(valueWithRemovedDigits(var));
}
return value;
}
private String valueWithRemovedDigits(String var) {
return var.replace("\\d+$", StringUtils.EMPTY);
}
private boolean endsWithDigits(String var) {
return p.matcher(var).matches();
}
}
以下是我的配置构建器的外观
public class CustomCommonsConfigurationBuilder extends DefaultConfigurationBuilder {
public CustomCommonsConfigurationBuilder() {
super();
}
public CustomCommonsConfigurationBuilder(String fileName) throws ConfigurationException {
super(fileName);
}
public CustomCommonsConfigurationBuilder(File file) {
super(file);
}
public CustomCommonsConfigurationBuilder(URL url) throws ConfigurationException {
super(url);
}
@Override
protected ConfigurationInterpolator createInterpolator() {
FallbackConfigurationInterpolator interpol = new FallbackConfigurationInterpolator();
interpol.setDefaultLookup(new StrLookup() {
@Override
public String lookup(String var) {
Object prop = resolveContainerStore(var);
return (prop != null) ? prop.toString() : null;
}
});
return interpol;
}
}
以下是我实例化配置构建器的方法。
@Before
public void setup() throws ConfigurationException {
System.setProperty("environment", "local");
config = (AbstractConfiguration) new CustomCommonsConfigurationBuilder("commons-configuration.xml")
.getConfiguration();
config.getSubstitutor().setEnableSubstitutionInVariables(true);
}
由于某种原因,我的自定义插补器中的查找方法永远不会被调用。如果您成功注册自定义插补器,有人可以帮忙吗?
先谢谢。