Czy application.yml obsługuje zmienne środowiskowe?

111

Próbowałem użyć zmiennych env w mojej konfiguracji application.yml, takich jak:

spring:
  main:
    show_banner: false

---

spring:
  profiles: production
server:
  address: $OPENSHIFT_DIY_IP
  port: $OPENSHIFT_DIY_PORT

ale zmienne env nie są rozwiązywane. Czy muszę podać inną notację?

W Railsach możesz np. Użyć <% = ENV ['FOOVAR']%>

Jedyną alternatywą jest uruchomienie aplikacji takiej jak:

java -jar my.jar --server.address=$OPENSHIFT_DIY_IP --server.port=$OPENSHIFT_DIY_PORT
Marcel Overdijk
źródło

Odpowiedzi:

147

Spróbuj ${OPENSHIFT_DIY_PORT}(zwykła notacja zastępcza Spring). Zobacz tutaj dla dokumentów.

Dave Syer
źródło
Właśnie tego potrzebowałem:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix
2
Dla przypomnienia - jeśli używasz kotlin, musisz umieścić swoje odniesienie w cudzysłowie i uciec od $np.root: "\${LOGGING_LEVEL_ROOT:info}"
Edward
Chłopaki, jak możemy przejść do przekazywania OPENSHIFT_DIY_PORT przez unix cli podczas uruchamiania aplikacji? Wiem, że możemy użyć -D do przekazania parametrów przesłonięcia, ale czy to działa również dla zmiennych env? Np .: nohup java -Xmx1024m -jar -Dspring.profiles.active = "cokolwiek". Czy istnieje sposób, aby to zrobić za pomocą zmiennych env?
Igor Donin
@IgorDonin, czy konkatenacja przypisań zmiennych i program wywoła dla ciebie opcję? Np .:$MY_ENV=value && java -jar ...
PAX
86

Możesz nawet dodać wartość domyślną, jeśli nie podano zmiennej środowiskowej:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}
Alex Efimov
źródło
5
Znalazłem tę składnię w aplikacji, którą odziedziczyłem, i nie mogłem znaleźć dokumentów Springa, które to pokazują. Jest dość oczywiste, co się dzieje, ale byłoby miło znaleźć odpowiednie dokumenty. Dziękuję za udostępnienie - jestem teraz bardziej przekonany do mojego wniosku.
wielebny
Czy użycie wartości domyślnych w konfiguracji UB jest możliwe, czy jest to wyraźnie określone?
anddero