2
votes

Comment charger et parcourir le fichier de propriétés dans Spring Boot

J'ai un fichier properties dans lequel les valeurs sont séparées par des virgules. Je suis en mesure d'obtenir les valeurs comme Object comme ci-dessous. Quelqu'un pourrait-il me dire comment séparer les valeurs et les obtenir dans String.

@PropertySource( value = "classpath:test1.properties", name = "test1" )

AbstractEnvironment ae = (AbstractEnvironment)env;
org.springframework.core.env.PropertySource test1Source = 
ae.getPropertySources().get("test1");
Properties propsTest1 = (Properties)test1Source.getSource();

   for(Object key : propsTest1.keySet()){
   System.out.println("Properties file======>   propsTest1.get(key));
  }

Code final

key-1 = value1,value11
key-2 = value2,value22
key-3 = value3,value33
key-4 = value4,value44

p >


2 commentaires

Spring Expression Language ( SPEL < / a>) aidera votre cas. Consultez cette question pour un aperçu: stackoverflow.com/questions/12576156/...


veuillez également partager votre résultat attendu.


3 Réponses :


3
votes

Vous pouvez utiliser l'annotation @Value avec @PropertySource pour obtenir la valeur d'une propriété. De plus, vous pouvez utiliser Spring Expression pour le diviser en liste, par exemple:

@PropertySource( value = "classpath:test1.properties", name = "test1" )
public class PropertyClass {

    @Value("#{'${key-1}'.split(',')}") 
    private List<String> key1Values;
}

Cela vous donnerait la liste de toutes les valeurs configurées par rapport à key-1 .


3 commentaires

Existe-t-il un moyen d'obtenir les valeurs de manière dynamique plutôt que de créer une variable pour chaque clé?


Ne pensez pas qu'il existe un moyen de le faire à moins que vous ne sous-classiez PropertyPlaceholderConfigurer , lisez ici: stackoverflow.com/ a / 11416312/1120793


Cette réponse est bonne. Mais j'ai accepté la réponse de Vinay parce qu'elle a résolu mon problème. J'ai également voté pour votre réponse. Merci



2
votes

Vous pouvez essayer quelque chose comme ci-dessous.

Properties propsTest1 = (Properties)test1Source.getSource();

for(Map.Entry<Object, Object> e : propsTest1.entrySet()){

   String value = (String)e.getValue();
   String[] values = value.split(",");
   // If you have spaces as between values, you have to take care of it.
}


2 commentaires

J'aime mieux la réponse de @Darshan Mehta.


Merci. Cela a aidé.



2
votes

.properties

@Value("#{${keys}}")  private Map<String,String> keys;

Code final

keys={key-1:'value1',key-1:'value2',....}

Vous pouvez également :

@ConfigurationProperties(prefix="map")
public class YourConfig {

    private List<String> keys = new ArrayList<String>();

    public List<String> getKeys() {
        return this.servers;
    }
}

map.key[0] = value1,value11
map.key[1] = value2,value22
map.key[2] = value3,value33
map.key[3] = value4,value44


0 commentaires