Was ist der richtige Weg, eine Systemeigenschaft im Frühjahr 4 mit der Annotation @Value als Standard anzugeben, wenn eine angegebene Eigenschaft nicht existiert?
Während dies für den Nicht-Standardfall funktioniert:
%Vor%Das funktioniert nicht, wenn ich einen Standard brauche:
%Vor%Auch das nicht:
%Vor%Beide geben mir eine Ausnahme zu dem Zeitpunkt, an dem Spring versucht, die Bean zu erstellen:
%Vor%Kann das gemacht werden?
Ich habe Folgendes versucht und es hat für mich funktioniert:
%Vor% Die fehlenden Teile für Sie, glaube ich, verwenden nicht ?:
und benötigen die #{}
. Laut dieser Antwort :
${...}
ist die Eigenschaftenplatzhaltersyntax. Es kann nur verwendet werden, um Eigenschaften zu dereferenzieren.
#{...}
ist die SpEL-Syntax, die weitaus fähiger und komplexer ist. Es kann auch Platzhalter für Eigenschaften und vieles mehr verwalten.
Im Grunde genommen sagen wir, dass Spring zuerst myapp.temp
als Eigenschaftsplatzhaltersyntax interpretiert, indem sie die ${}
-Syntax verwendet. Wir verwenden dann :
anstelle von ?:
(das heißt Elvis-Operator ), da der elvis-Operator nur für Spring Expression Language-Ausdrücke und nicht für die Eigenschaften-Platzhaltersyntax gilt. Der dritte Teil unserer Anweisung ist #{systemProperties['java.io.tmpdir']}
, der Spring den nächsten Ausdruck als Spring Expression interpretiert und uns ermöglicht, Systemeigenschaften zu erhalten.
Für mich funktioniert es nur mit anderen Eigenschaftsnamen (als property.name.a ein Schlüssel mit einem Wert in meiner application.properties und property.name.b einer Umgebungsvariablen) wie:
%Vor%Die gleichen Namen funktionierten nicht wie erwartet (Laden des Standards, wenn die erste Eigenschaft nicht vorhanden ist), z. B .:
%Vor%