SpringBoot配置文件中Map和List类型如何配置
对象、Map(属性和值)
例如配置类中的字段为:
Map<String,Object> maps;
在yml配置文件中,行内写法:
person.maps: {key1: value1,key2: value2}
需要注意冒号(:)后的空格,或者
person:
maps:
key: value
在properties配置文件中
person.maps.key=value
数组(List、Set)
在yml配置文件中
person:
list:
- 1
- 2
- 3
行内写法
person:
list: [1,2,3]
在properties配置文件中
person.list[0]=1
person.list[1]=2
person.list[2]=3
配置List<Bean>
创建dto对象
@Data
@NoArgsConstructor
public class ActionDto {
private String nameC;
private String nameE;
}
yml配置
action:
list:
- nameC: asd
nameE: asd1
- nameC: qwe
nameE: qwe1
config注入
@Data
@Component
@ConfigurationProperties(prefix = "action")
public class ActionConfig {
private List<ActionDto> list;
}
也可以采用map的方式装配。
yml配置(两种方式都可以,选一种即可)
action1:
map:
asdasd: qwe
zxczxc: ewq
action2: "{key1: 'value1', key2: 'value2'}"
config注入:
@Data
@Component
@ConfigurationProperties(prefix = "action1")
public class ActionConfig {
private Map<String, String> map;
}
@Data
@Component
public class ActionConfig {
@Value("#{${action2}}")
private Map<String, String> maps;
}
自定义配置属性
Spring Boot提供自定义配置组件,拿前面举例的属性来写一个规范的配置文件:
@Component // 或者@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {
private Map<String, Object> maps;
private List<String> list;
private String name;
private int age;
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@ConfigurationProperties 注解向Spring Boot声明该类中的所有属性和配置文件中相关的配置进行绑定。prefix = "person":声明配置前缀,将该前缀下的所有属性进行映射。
@Component 或者@Configuration:将该组件加入Spring Boot容器,只有这个组件是容器中的组件,配置才生效。