无法使用@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();
}
}
我正在从属性文件中读取配置。现在我有一个错误 我认为与 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();
}
}