将环境变量传递给 application.yml
Posted
技术标签:
【中文标题】将环境变量传递给 application.yml【英文标题】:Passing environment variables to application.yml 【发布时间】:2021-09-05 09:06:26 【问题描述】:在 Spring Boot 应用程序中,我想将一些环境变量从 env 文件(可用于不同环境)传递给 application.yml。我们决定不为不同的环境使用 spring 配置文件,因为使用 .env 文件可以使我们以后更容易迁移到云。在 application.yml 中定义这些变量如下:
datasource:
driverClassName: org.mariadb.jdbc.Driver
username: "$SPRING_DATASOURCE_USERNAME"
password: "$SPRING_DATASOURCE_PASSWORD"
此外,我使用以下命令导出了 .env 文件中的所有环境变量,其中还包括 $SPRING_DATASOURCE_USERNAME 和 $SPRING_DATASOURCE_PASSWORD:
export $(grep -v '^#' .env | xargs -d '\n')
运行时
./gradlew test
我收到以下错误:
Missing property (SPRING_DATASOURCE_USERNAME) for Groovy template expansion.
问题是gradle wrapper没有获取系统环境变量或者导出的环境变量。有没有办法使用 .env 文件解决这个问题?任何提示表示赞赏!
【问题讨论】:
不能用@TestPropertySource
吗?
添加属性文件没有帮助。我需要添加任何 gradle 配置吗?是否可以在不更改任何代码的情况下做到这一点?
.env 文件的格式是什么,它们是如何添加到 Spring 环境中的?
【参考方案1】:
由于您已将它们导出为环境变量,您可以从您的application.yml
中删除spring.datasource.username
和spring.datasource.password
。 Spring 会自动从环境变量中搜索它们。您不需要像模板一样指定它们。一个极端的用法是通过环境变量导出所有属性并将application.yml
留空。
参考文献
优先级:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config 规则:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.typesafe-configuration-properties.relaxed-binding.environment-variables【讨论】:
以上是关于将环境变量传递给 application.yml的主要内容,如果未能解决你的问题,请参考以下文章