web-dev-qa-db-fra.com

Fichier .properties de printemps: obtenir un élément sous forme de tableau

Je charge les attributs de propriétés d'un .properties fichier en utilisant Spring comme suit:

file: elements.properties
base.module.elementToSearch=1
base.module.elementToSearch=2
base.module.elementToSearch=3
base.module.elementToSearch=4
base.module.elementToSearch=5
base.module.elementToSearch=6

Le fichier XML de printemps

file: myapplication.xml
<bean id="some"
      class="com.some.Class">
      <property name="property" value="#{base.module.elementToSearch}" />
</bean>

Et ma classe.Java

file: Class.Java
public void setProperty(final List<Integer> elements){
    this.elements = elements;
}

Mais lors du débogage, les éléments de paramètre n'obtiennent que le dernier élément de la liste. Il existe donc une liste d'un élément avec la valeur "6", au lieu d'une liste de 6 éléments.

J'ai essayé d'autres approches, comme ajouter de la valeur uniquement #{base.module} mais il ne trouve aucun paramètre dans le fichier de propriétés.

Une solution consiste à avoir dans le fichier elements.properties une liste séparée par des virgules, comme:

base.module.elementToSearch=1,2,3,4,5,6

et utilisez-le comme une chaîne et analysez-le, mais existe-t-il une meilleure solution?

76
RamonBoza

Si vous définissez votre tableau dans le fichier de propriétés, procédez comme suit:

base.module.elementToSearch=1,2,3,4,5,6

Vous pouvez charger un tel tableau dans votre classe Java) comme ceci:

  @Value("${base.module.elementToSearch}")
  private String[] elementToSearch;
155
svlada

Et si vous utilisez un autre délimiteur que la virgule, vous pouvez également l'utiliser.

@Value("#{'${my.config.values}'.split(',')}")
private String[] myValues;   // could also be a List<String>

et

vous pourriez avoir dans les propriétés de votre application

my.config.values=value1, value2, value3
23
R K Punjal

Voici un exemple de ce que vous pouvez faire au printemps 4.0+

application.properties contenu:

some.key=yes,no,cancel

Code Java:

@Autowire
private Environment env;

...

String[] springRocks = env.getProperty("some.key", String[].class);
23
Juha Hanka