2014-10-19 8 views
12

Ich benutze Spring-Boot-1.1.7. Meine Absicht ist es, eine Bean zu meinem Kontext nach einem Wert einer Eigenschaft vom Typ String hinzuzufügen.Spring Boot - @ ConditionalOnProperty oder @ ConditionalOnExpression

ich meine, ich kann eine Menge Beispiele für Boolesche Werte wie diese sehen:

@ConditionalOnExpression("${xxx.enabled:true}") 

Aber ich möchte einen Ausdruck auf einem Wert einer Eigenschaft basiert, zum Beispiel:

@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ") 

oder so ähnlich.

Kann mir jemand ein Beispiel zeigen, wie es geht?

Antwort

11

Schließlich dieses für mich gearbeitet:

@ConditionalOnExpression("'${server.host}'=='localhost'") 
+0

Ja das würde funktionieren (offensichtlich wirklich). Sie vergleichen 2 Literale. –

+1

Nur um zu bestätigen, obwohl $ zitiert wird, wird $ {server.host} korrekt aufgelöst? Wenn also server.host 'foobar' ist, wird der Ausdruck als 'foobar' == 'localhost' ausgewertet? – JBCP

+0

Ja, es ist, und die Auswertung wird korrekt durchgeführt, nur wenn Sie es angeben. – Modi

1

Wenn der Wert, mit dem Sie vergleichen möchten, ein Literal ist, müssen Sie es angeben, und der Platzhalter würde den Namen der Eigenschaft umkreisen (nicht den ganzen Ausdruck), z. ${server.host}=='localhost'

+0

Ihr Beispiel mit dieser Ausnahme beendet Plazierung: "Verursacht durch: org.springframework.expression .spel.SpelEvaluationException: EL1008E: (Pos 0): Eigenschaft oder Feld 'localhost' kann nicht gefunden werden auf Objekt vom Typ 'org.springframework.beans.factory.config.BeanExpressionContext' - vielleicht nicht öffentlich? ' Ich fügte den Ausdruck hinzu, der Arbeit (überraschend, ich muss sagen) an der folgenden Antwort. Wie auch immer, danke. – Modi

15

Für Eigenschaftswert bedingte I verwendet:

@ConditionalOnProperty(name="server.host", havingValue="localhost")