Je charge les attributs de propriétés à partir d'un .properties
fichier à l'aide de 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 Spring
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, donc, il y a une liste d'un élément avec la valeur "6", au lieu d'une liste avec 6 éléments.
J'ai essayé d'autres approches, comme l'ajout de valeur uniquement, #{base.module}
mais il ne trouve aucun paramètre dans le fichier de propriétés.
Une solution de contournement 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 y a-t-il une meilleure solution?
java
spring
placeholder
properties-file
RamonBoza
la source
la source
Réponses:
Si vous définissez votre tableau dans un fichier de propriétés comme:
Vous pouvez charger un tel tableau dans votre classe Java comme ceci:
la source
List<String>
de la même manière ne semble pas fonctionner (la liste n'aura qu'un seul élément).String[]
tant que type fonctionne, alors que l'utilisationList<String>
ne fonctionne pas.List<String>
au lieu deString[]
, vous devez ajouter au moins un<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
à votre fichierapplicationContext.xml
. Sinon, le service de conversion n'est pas utilisé, mais les éditeurs de propriétés par défaut, qui ne prennent pas en charge la conversion de chaînes en collections, uniquement des tableaux: docs.spring.io/spring/docs/current/spring-framework-referenceEt si vous utilisez un séparateur différent autre que la virgule, vous pouvez également l'utiliser.
et
dans les propriétés de votre application, vous pourriez avoir
la source
Voici un exemple de la façon dont vous pouvez le faire dans Spring 4.0+
application.properties
contenu:Code Java:
la source
Avec un Spring Boot, on peut faire ce qui suit:
application.properties
Classe de configuration
Ceci est nécessaire, sans cette classe ou sans le
values
classe, cela ne fonctionne pas.Classe d'application Spring Boot
la source
Si vous devez passer le symbole astérisque, vous devez l'envelopper de guillemets.
Dans mon cas, je dois configurer des cors pour les websockets. J'ai donc décidé de mettre les urls cors dans application.yml. Pour prod env, j'utiliserai des URL spécifiques, mais pour les développeurs, il est possible d'utiliser uniquement *.
Dans le fichier yml, j'ai:
Dans la classe Config, j'ai:
la source