首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不使用@Autowire获取ConfigurationProperties实例

不使用@Autowire获取ConfigurationProperties实例
EN

Stack Overflow用户
提问于 2019-06-11 02:49:29
回答 1查看 224关注 0票数 0

有没有一种方法可以不使用@ConfigurationProperties注释而是通过提供prefix来获得带有@Autowire注释的bean

我有这个约束注释,在这里我传递了属性的名称,它有助于做出关于验证的决策。通过知道属性的完全限定名,我想要检查该键的值

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 02:55:41

为了覆盖属性,然后回滚它:

代码语言:javascript
复制
protected void overrideProperties(Map<String, String> overrideMap) {
    log.info("Overriding properties = {}", overrideMap);
    Environment env = appContext.getEnvironment();
    if (env instanceof ConfigurableEnvironment) {
        ConfigurableEnvironment confEnv = (ConfigurableEnvironment) env;
        MutablePropertySources sources = confEnv.getPropertySources();
        // removing in case rollback was not done
        if (sources.contains(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME)) {
            sources.remove(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME);
        }
        Properties overrides = new Properties();
        overrides.putAll(overrideMap);
        sources.addFirst(new PropertiesPropertySource(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME, overrides));
        // this triggers changes in beans annotated with @ConfigurationProperties and updates @Value fields
        appContext.publishEvent(new EnvironmentChangeEvent(overrideMap.keySet()));
    }
    // this should never happen
    else {
        log.info("Unable to override properties as Environment is not of type ConfigurableEnvironment");
    }
}

protected void rollbackOverriddenProperties(Map<String, String> overrideMap) {
    log.info("Rolling back properties = {}", overrideMap);
    Environment env = appContext.getEnvironment();
    if (env instanceof ConfigurableEnvironment) {
        ConfigurableEnvironment confEnv = (ConfigurableEnvironment) env;
        MutablePropertySources sources = confEnv.getPropertySources();
        sources.remove(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME);
        // this triggers changes in beans annotated with @ConfigurationProperties and updates @Value fields
        appContext.publishEvent(new EnvironmentChangeEvent(overrideMap.keySet()));
    }
    // this should never happen
    else {
        log.info("Unable to rollback overridden properties as Environment is not of type ConfigurableEnvironment");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56531965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档