Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用@Autowire获取ConfigurationProperties实例_Java_Spring_Spring Boot - Fatal编程技术网

Java 不使用@Autowire获取ConfigurationProperties实例

Java 不使用@Autowire获取ConfigurationProperties实例,java,spring,spring-boot,Java,Spring,Spring Boot,有没有一种方法可以通过不使用@Autowire注释,而是提供前缀来获得带有@ConfigurationProperties注释的bean 我有这个约束注释,在这里我传递属性的名称,该属性有助于关于验证的决策。通过知道属性的完全限定名,我想检查该键的值 通过知道属性的完全限定名,我想检查该键的值 然后去拿物业: @Autowired private Environment env; // method here String value = this.env.getProperty(pr

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

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

通过知道属性的完全限定名,我想检查该键的值

然后去拿物业:

@Autowired
private Environment env;

// method here
    String value = this.env.getProperty(propName);
通过知道属性的完全限定名,我想检查该键的值

然后去拿物业:

@Autowired
private Environment env;

// method here
    String value = this.env.getProperty(propName);

要替代特性,然后将其回滚,请执行以下操作:

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");
    }
}
受保护的无效覆盖属性(映射覆盖映射){
info(“覆盖属性={}”,覆盖映射);
Environment env=appContext.getEnvironment();
if(可配置环境的环境实例){
ConfigurableEnvironment confEnv=(ConfigurableEnvironment)env;
MutablePropertySources sources=confEnv.getPropertySources();
//如果未完成回滚,请删除
if(sources.contains(测试\资源\属性\覆盖\名称)){
删除(测试资源属性覆盖名称);
}
属性覆盖=新属性();
overrides.putAll(overrideMap);
addFirst(新属性PropertiesPropertySource(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME,overrides));
//这将触发用@ConfigurationProperties注释的bean中的更改,并更新@Value字段
publishEvent(新环境变更事件(overrideMap.keySet());
}
//这永远不应该发生
否则{
log.info(“无法重写属性,因为环境不是ConfigurableEnvironment类型”);
}
}
受保护的无效回滚覆盖属性(映射覆盖映射){
info(“回滚属性={}”,重写映射);
Environment env=appContext.getEnvironment();
if(可配置环境的环境实例){
ConfigurableEnvironment confEnv=(ConfigurableEnvironment)env;
MutablePropertySources sources=confEnv.getPropertySources();
删除(测试资源属性覆盖名称);
//这将触发用@ConfigurationProperties注释的bean中的更改,并更新@Value字段
publishEvent(新环境变更事件(overrideMap.keySet());
}
//这永远不应该发生
否则{
log.info(“无法回滚重写的属性,因为环境不是ConfigurableEnvironment类型”);
}
}

要覆盖属性,然后将其回滚:

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");
    }
}
受保护的无效覆盖属性(映射覆盖映射){
info(“覆盖属性={}”,覆盖映射);
Environment env=appContext.getEnvironment();
if(可配置环境的环境实例){
ConfigurableEnvironment confEnv=(ConfigurableEnvironment)env;
MutablePropertySources sources=confEnv.getPropertySources();
//如果未完成回滚,请删除
if(sources.contains(测试\资源\属性\覆盖\名称)){
删除(测试资源属性覆盖名称);
}
属性覆盖=新属性();
overrides.putAll(overrideMap);
addFirst(新属性PropertiesPropertySource(TEST_RESOURCE_PROPERTIES_OVERRIDE_NAME,overrides));
//这将触发用@ConfigurationProperties注释的bean中的更改,并更新@Value字段
publishEvent(新环境变更事件(overrideMap.keySet());
}
//这永远不应该发生
否则{
log.info(“无法重写属性,因为环境不是ConfigurableEnvironment类型”);
}
}
受保护的无效回滚覆盖属性(映射覆盖映射){
info(“回滚属性={}”,重写映射);
Environment env=appContext.getEnvironment();
if(可配置环境的环境实例){
ConfigurableEnvironment confEnv=(ConfigurableEnvironment)env;
MutablePropertySources sources=confEnv.getPropertySources();
删除(测试资源属性覆盖名称);
//这将触发用@ConfigurationProperties注释的bean中的更改,并更新@Value字段
publishEvent(新环境变更事件(overrideMap.keySet());
}
//这永远不应该发生
否则{
log.info(“无法回滚重写的属性,因为环境不是ConfigurableEnvironment类型”);
}
}

Nice,我可以用类似的方法设置变量吗?@iForm。请参见下面我关于如何重写propertyNice的回答,我是否也可以使用类似的方法设置变量?@iForm。请参见下面我关于如何重写属性的回答