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

Can't bind properties with @Bean and @ConfigurationProperties

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

如果我这样做 private Map name = 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;

您可以将您的配置 class 替换成这样(更简单);

@Configuration
public class Config {

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

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

上查看更多信息

或者另一种方法,您可以使用 pojo class 来处理配置。例如;

您拥有以下属性;

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

并在配置 class 中使用它;

@Configuration
public class Config {

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