无法使用@Bean和@ConfigurationProperties绑定属性

时间:2019-07-27 00:43:58

标签: java spring-boot spring-annotations

我正在从属性文件中读取配置。现在,我遇到了一个错误,它我认为与spring bean的初始化顺序有关

如果我执行私有地图名称= new HashMap <>();可以从属性文件成功加载。

但是现在我有无法将属性绑定到ServiceNameConfig

我不知道为什么会这样以及如何处理。

@ConfigurationProperties(prefix = "amazon.service")
@Configuration
@EnableConfigurationProperties(ServiceNameConfig.class)
public class ServiceNameConfig {

   //If I do private Map<String, String> name = new HashMap<>(); It can be successfully load from properties file.
    private Map<String, String> name;

    @Bean(value = "serviceName")
    public Map<String, String> getName() {
        return name;
    }

    public void setName(Map<String, String> name) {
        this.name = name;
    }

} 

其用法;

@Autowired
@Qualifier("serviceName")
Map<String, String> serviceNameMap;

1 个答案:

答案 0 :(得分:2)

您可以像这样(更简单)替换您的配置类;

@Configuration
public class Config {

    @Bean
    @ConfigurationProperties(prefix = "amazon.service")
    public Map<String, String> serviceName() {
        return new HashMap<>();
    }
}

对于@ConfigurationProperties注入,您需要提供一个空的bean对象实例。在baeldung

上查看有关此内容的更多信息

或者,可以使用pojo类来处理配置。例如;

您具有以下属性;

amazon:
  service:
    valueA: 1
    valueB: 2
    details:
      valueC: 3
      valueD: 10

您可以使用如下所示的pojo;

class Pojo {

    private Integer valueA;
    private Integer valueB;
    private Pojo2 details;

    // getter,setters

    public static class Pojo2 {

        private Integer valueC;
        private Integer valueD;

        // getter,setters
    }
}

并在config类中使用它;

@Configuration
public class Config {

    @Bean
    @ConfigurationProperties(prefix = "amazon.service")
    public Pojo serviceName() {
        return new Pojo();
    }
}