2017-10-06 2 views
0

J'ai un fichier application.yml dynamique et j'aimerais utiliser des listes et des cartes imbriquées. Je sais que ça ne marche pas, mais peut-être que quelqu'un a trouvé une solution pour cela.Utilisation des listes et des cartes en YAML avec @VALUE

Mon but est-ce que je peux définir quelque chose comme ça:

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; 

Répondre

0

Il n'est pas simple. Supposons que ci-dessous est la configuration que vous souhaitez:

user: 
test: 
    - 
    name: johndoe 
    email: [email protected] 
    - 
    name: jackdoe 
    email: jackdoe 

Ensuite, vous devez créer une classe de configuration

@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; 
     } 
    } 
} 

Et utilisez-le cas échéant

@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()); 
     } 
    } 

}