【问题标题】:Passing environment variables to application.yml将环境变量传递给 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 环境中的?

标签: spring spring-boot gradle environment-variables gradlew


【解决方案1】:

由于您已将它们导出为环境变量,您可以从您的application.yml 中删除spring.datasource.usernamespring.datasource.password。 Spring 会自动从环境变量中搜索它们。您不需要像模板一样指定它们。一个极端的用法是通过环境变量导出所有属性并将application.yml留空。

参考文献

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2020-03-27
    • 2017-03-30
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2020-11-07
    相关资源
    最近更新 更多