application.yml是否支持环境变量?


109

我尝试在我的application.yml配置中使用env变量,例如:

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

Answers:


145

试试${OPENSHIFT_DIY_PORT}(通常的Spring占位符表示法)。看到这里的文档。


这正是我所需要的:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix

2
只是想指出-如果你正在使用科特林,你需要把你的参考报价和逃避$root: "\${LOGGING_LEVEL_ROOT:info}"
爱德华

伙计们,我们如何在启动应用程序时通过unix cli传递OPENSHIFT_DIY_PORT?我知道我们可以使用-D传递覆盖参数,但这对env变量也起作用吗?例如:nohup java -Xmx1024m -jar -Dspring.profiles.active =“无论”。有没有办法用env vars做到这一点?
伊戈尔·多宁

@IgorDonin,变量分配和程序的串联会为您调用一个选项吗?例如:$MY_ENV=value && java -jar ...
PAX

83

如果没有提供环境变量,您甚至可以添加默认值:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}

5
我在继承的应用程序中发现了这种语法,并且无法找到显示此语法的Spring文档。很明显发生了什么,但是能够找到它的文档会很好。感谢您的分享-我现在对自己的结论更有信心。
尊敬

是在配置UB中使用默认值还是明确声明了可能?
anddero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.