2014-10-19 20 views
12

Używam Spring-Boot-1.1.7. Moim zamiarem jest dodanie komponentu bean do mojego kontekstu zgodnie z wartością właściwości typu string.Spring boot - @ConditionalOnProperty lub @ConditionalOnExpression

Znaczy, widzę wiele przykładów wartości logicznych, takich jak ten:

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

Ale chcę wyraz w oparciu o wartość nieruchomości, na przykład:

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

lub coś w tym stylu.

Czy ktoś może mi pokazać przykład, jak to zrobić?

Odpowiedz

11

Ostatecznie ten pracował dla mnie:

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

Tak, to zadziała (oczywiście naprawdę). Porównujesz 2 literały. –

+1

Po prostu, aby potwierdzić, mimo że jego quoted, $ {server.host} jest rozwiązany poprawnie? Więc jeśli serwer.host jest 'foobar', wyrażenie jest oceniane jako 'foobar' == 'localhost'? – JBCP

+0

Tak jest, a ocena jest wykonana poprawnie, tylko jeśli ją zacytujesz. – Modi

1

Jeśli wartość, z którą chcesz porównać, jest literalna, musisz ją podać, a symbol zastępczy obejmie nazwę właściwości (a nie całe wyrażenie), np. ${server.host}=='localhost'

+0

Umieszczanie przykład zakończył się ten wyjątek: "Spowodowane przez: org.springframework.expression .spel.SpelEvaluationException: EL1008E: (pos 0): Nie można znaleźć właściwości lub pola "localhost" na obiekcie typu "org.springframework.beans.factory.config.BeanExpressionContext" - może nie jest publiczne? Dodałem wyrażenie, które działa (zadziwiająco, muszę powiedzieć) na poniższą odpowiedź. Tak czy inaczej, dziękuję. – Modi

15

Dla wartości nieruchomości uwarunkowane użyłem:

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