Wir verwenden einen PropertyPlaceholderConfigurer , um Java-Eigenschaften in unserer Spring-Konfiguration zu verwenden ( Details hier ).
z.B:
<foo name="port">
<value>${my.server.port}</value>
</foo>
Wir möchten eine zusätzliche Eigenschaft hinzufügen, haben jedoch ein verteiltes System, in dem vorhandene Instanzen alle einen Standardwert verwenden können. Gibt es eine Möglichkeit, das Aktualisieren aller unserer Eigenschaftendateien zu vermeiden, indem in der Spring-Konfiguration ein Standardwert angegeben wird, wenn kein übergeordneter Eigenschaftswert definiert ist?
quelle
18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA
ist? Ich bin sicher, dass alle anderen es wissen und ich bin nur dumm, aber nur für den Fall ...Spring 3 unterstützt die
${my.server.port:defaultValue}
Syntax.quelle
${my.server.port:-defaultValue}
auch das gleiche Ergebnis zu geben, beachten Sie das ":-
" im Gegensatz zu ":
".<context:property-placeholder/>
damit dies funktioniert, oder einPropertyPlaceholderConfigurer
Es gibt eine wenig bekannte Funktion, die dies noch besser macht. Sie können einen konfigurierbaren Standardwert anstelle eines fest codierten Werts verwenden. Hier ein Beispiel:
config.properties:
context.xml:
Führen Sie dies in config.properties aus, um die Standardeinstellung zu verwenden und sie später problemlos überschreiben zu können:
quelle
${timeout.myBean:${timeout.default}}
. Dadurch konnte mein Standard auch eine Variable sein.sollte funktionieren, damit Sie 8088 als Standardport haben
Siehe auch: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
quelle
Dem Standardwert kann ein
:
nach dem Eigenschaftsschlüssel folgender Wert folgen , zOder im Java-Code:
Sehen:
valueSeparator
(vonAbstractPropertyResolver
)und
VALUE_SEPARATOR
(vonSystemPropertyUtils
)Übrigens ist der Elvis-Operator nur in Spring Expression Language (SpEL) verfügbar,
z. B.: Https://stackoverflow.com/a/37706167/537554
quelle
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html weist darauf hin, dass "lokale Eigenschaften", die auf der Bean selbst definiert sind, als Standardwerte betrachtet werden, die durch aus Dateien gelesene Werte überschrieben werden:
quelle
Ich finde auch eine andere Lösung, die für mich funktioniert. In unserem Legacy-Frühjahrsprojekt verwenden wir diese Methode, um unseren Benutzern die Möglichkeit zu geben, diese eigenen Konfigurationen zu verwenden:
Und in unseren Code, um auf diese Eigenschaften zuzugreifen, müssen Sie Folgendes schreiben:
Und wenn eine Situation auftritt, in der Sie eine neue Eigenschaft hinzufügen müssen, diese aber derzeit nicht in der Produktionsbenutzerkonfiguration hinzufügen möchten, wird es sehr schnell zur Hölle, wenn Sie alle Ihre Testkontexte patchen müssen oder Ihre Anwendung fehlschlägt Anfang.
Um dieses Problem zu beheben, können Sie mit der nächsten Syntax einen Standardwert hinzufügen:
Es war eine echte Entdeckung für mich.
quelle