春季使用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()); 
     } 
    } 

}