我一直在尝试在公共配置中注册一个自定义配置插值器,默认情况下会处理一些后备值。
这是插值器的代码。
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);
}
由于某种原因,我的自定义插值器中的查找方法永远不会被调用。如果您已成功注册自定义插值器,有人可以帮忙吗?
提前致谢。