Nous utilisons un PropertyPlaceholderConfigurer pour utiliser les propriétés java dans notre configuration Spring ( détails ici )
par exemple:
<foo name="port">
<value>${my.server.port}</value>
</foo>
Nous aimerions ajouter une propriété supplémentaire, mais disposer d'un système distribué où les instances existantes pourraient toutes utiliser une valeur par défaut. Existe-t-il un moyen d'éviter de mettre à jour tous nos fichiers de propriétés, en indiquant une valeur par défaut dans la configuration Spring lorsque aucune valeur de propriété de remplacement n'est définie?
la source
18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA
? Je suis sûr que tout le monde le sait et je suis juste stupide, mais juste au cas où ...Spring 3 prend en charge la
${my.server.port:defaultValue}
syntaxe.la source
${my.server.port:-defaultValue}
aussi donner le même résultat, notez le ":-
" par opposition à ":
".<context:property-placeholder/>
pour que cela fonctionne, ou ajouter unPropertyPlaceholderConfigurer
Il existe une fonctionnalité peu connue, ce qui rend cela encore meilleur. Vous pouvez utiliser une valeur par défaut configurable au lieu d'une valeur codée en dur, voici un exemple:
config.properties:
context.xml:
Pour utiliser la valeur par défaut tout en étant capable de remplacer facilement plus tard, procédez comme suit dans config.properties:
la source
${timeout.myBean:${timeout.default}}
. Cela a permis à ma valeur par défaut d'être également une variable.devrait fonctionner pour que vous ayez 8088 comme port par défaut
Voir aussi: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
la source
La valeur par défaut peut être suivie d'un
:
après la clé de propriété, par exempleOu en code java:
Voir:
valueSeparator
(deAbstractPropertyResolver
)et
VALUE_SEPARATOR
(deSystemPropertyUtils
)BTW, l' opérateur Elvis est uniquement disponible dans Spring Expression Language (SpEL),
par exemple: https://stackoverflow.com/a/37706167/537554
la source
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html indique que les "propriétés locales" définies sur le bean lui-même seront considérées comme des valeurs par défaut remplacées par les valeurs lues à partir des fichiers:
la source
Aussi je trouve une autre solution qui fonctionne pour moi. Dans notre projet de printemps hérité, nous utilisons cette méthode pour donner à nos utilisateurs la possibilité d'utiliser ces propres configurations:
Et dans notre code pour accéder à ces propriétés, il faut écrire quelque chose comme ça:
Et si une situation se présente lorsque vous devez ajouter une nouvelle propriété mais que pour l'instant vous ne voulez pas l'ajouter dans la configuration utilisateur de production, cela devient très vite un enfer lorsque vous devez patcher tous vos contextes de test ou votre application échouera Commencez.
Pour gérer ce problème, vous pouvez utiliser la syntaxe suivante pour ajouter une valeur par défaut:
C'était une vraie découverte pour moi.
la source