春季使用YAML中的列表和地图,使用@VALUE
问题描述:
我有一个动态的application.yml文件,我想使用嵌套列表和地图。春季使用YAML中的列表和地图,使用@VALUE
我知道它不能用于开箱即用,但也许有人找到了解决方案。
我的目标是什么呢,我可以定义这样的事情:
user:
test:
- peter
- willi
test2:
- helloA: abc
helloA2: def
- helloB: 123
helloB2: 345
-
@Value("${user.test}")
private String[] names;
@Value("${user.test2}")
private List<Map> test;
答
这并不简单。让我们假设下面是配置要:
user:
test:
-
name: johndoe
email: [email protected]
-
name: jackdoe
email: jackdoe
接下来,你必须创建一个配置类
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
private List<User> users;
public MyConfig() {
}
public MyConfig(List<User> users) {
this.users = users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List<User> getUsers() {
return users;
}
public static class User {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
}
,然后用它在适当
@Configuration
@EnableConfigurationProperties(User.class)
public class ClassThatNeedsUser{
@Autowired
private User user;
private Map usersMap = new HashMap();
@Bean
public ClassThatNeedsUser getUserList(){
for(User user: user.getUsers()) {
usersMap.put(user.getName(), user.getEmail());
}
}
}