1

我一直在尝试在公共配置中注册一个自定义配置插值器,默认情况下会处理一些后备值。

这是插值器的代码。

   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);
    }

由于某种原因,我的自定义插值器中的查找方法永远不会被调用。如果您已成功注册自定义插值器,有人可以帮忙吗?

提前致谢。

4

0 回答 0