我正在从属性文件中读取配置。现在,我遇到了一个错误,它我认为与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;
答案 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();
}
}