-1
votes

Springboot n'a pas réussi à mapper le fichier de propriétés sur la variable

Je veux mapper des valeurs entre un fichier YAML avec un mappe > code> dans Springboot

pays.yml code> fichier: p >

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("entries")
public class SampleConfig {

    private Map<String, List<String>> map = new HashMap<>();

    @Bean
    public void bean1(){
        System.err.println("map has size: "+map.size());
    }
}


2 commentaires

Je pense que vous avez besoin de getter / setter pour que cela fonctionne ..


Pourquoi ce pays.yml n'est pas application.yml ?


3 Réponses :


1
votes

En supposant que votre application choisisse la configuration à partir de pays.yml code> (je vérifierais cela aussi) - Vous avez besoin de getters et de setters pour le faire fonctionner. Add Ajouter:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("entries")
public class SampleConfig {

    private Map<String, List<String>> map = new HashMap<>();

    public Map<String, List<String>> getMap(){
        return map;
    }
    public void setMap(Map<String, List<String>> map){
        this.map=map;
    }

}


1 commentaires

J'ai effectivement ajouté @propertysource ("ClassPath: country.yml") aussi, mais la taille de la carte est toujours 0



2
votes

Il y a deux problèmes

1) Par défaut Spring recherchera Application.yml ou Application.Property dans les emplacements par défaut

Pour résoudre le problème ci-dessus, vous pouvez utiliser application.yml au lieu de pays.yml

2) Vous pouvez utiliser @propertysource pour charger n'importe quel fichier de propriétés externe, mais yml n'est pas pris en charge avec cette annotation

24.7.4 HORFCOMMINATIONS YAML Vous ne pouvez pas utiliser @properTysource avec YML fichier

Les fichiers YAML ne peuvent pas être chargés à l'aide de l'annotation @properTysource. Donc, dans le cas où vous devez charger des valeurs de cette façon, vous devez utiliser un fichier de propriétés.

Comment lire le fichier YML à l'aide du ressort @properTysource


3 commentaires

J'ai essayé le @propertysource plus avec des setters et getters comme d'autres suggérées, il ne fonctionne toujours pas


@properTysource ne prend pas explicitement en charge YamL.


mis à jour ma réponse, il prend le temps de rassembler toutes les informations @Hades



2
votes

Ceci fonctionnera et imprimera CountryData: {my = [fr, zh]}

mais lisez sûrement la réponse de Deadpool. < p> Le hack est ici pour remplacer le nom de la configuration par défaut "Application" par "Pays"

Dans l'exemple, je l'ai fait en la définissant via une propriété système, mais Démarrer votre application via java -jar mycountryapp.jar --spring.config.name = pays devrait fonctionner parfaitement xxx


1 commentaires

Merci! J'ai trouvé une autre façon qui utilise PropertySourceFactor à lire dans le fichier YAML comme suggéré dans ce lien MDEINUM.GITUB.IO/2018-07-04-PROPERTSOURCE-Avithan-yaml-files