Поддерживает ли application.yml переменные среды?

111

Я пробовал использовать переменные env в своей конфигурации application.yml, например:

spring:
  main:
    show_banner: false

---

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

но переменные env не разрешены. Должен ли я использовать другие обозначения?

В Rails вы можете, например, использовать <% = ENV ['FOOVAR']%>

Единственная альтернатива - запустить приложение, например:

java -jar my.jar --server.address=$OPENSHIFT_DIY_IP --server.port=$OPENSHIFT_DIY_PORT
Марсель Овердейк
источник

Ответы:

147

Попробуйте ${OPENSHIFT_DIY_PORT}(обычное обозначение заполнителя Spring). См. Здесь для документации.

Дэйв Сайер
источник
Это было именно то, что мне нужно:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix
2
Просто чтобы указать - если вы используете котлин, вам нужно заключить ссылку в кавычки и избежать, $например,root: "\${LOGGING_LEVEL_ROOT:info}"
Эдвард
Ребята, а как мы можем передать OPENSHIFT_DIY_PORT через unix cli при запуске приложения? Я знаю, что мы можем использовать -D для передачи параметров переопределения, но работает ли это также для переменных env? Пример: nohup java -Xmx1024m -jar -Dspring.profiles.active = "что угодно". Есть ли способ сделать это с помощью env vars?
Игорь Донин
@IgorDonin, не вызовет ли объединение присвоений переменных и программы вариант для вас? Напр .:$MY_ENV=value && java -jar ...
PAX
86

Вы даже можете добавить значение по умолчанию, если переменная среды не указана:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}
Алексей Ефимов
источник
5
Я нашел этот синтаксис в приложении, которое унаследовал, и не смог найти документы Spring, которые это показывают. То, что происходит, довольно очевидно, но было бы неплохо найти для этого документацию. Спасибо, что поделились - теперь я уверен в своем выводе.
преподобный
Используются ли значения по умолчанию в конфигурации UB или это явно указано возможно?
anddero