【问题标题】:Spring Boot read environment variables inside application-propertiesSpring Boot 读取应用程序属性中的环境变量
【发布时间】:2021-03-12 17:00:45
【问题描述】:

所以我一直试图弄清楚如何在 application.properties 或 application.yaml 中使用环境变量。由于这适用于无数框架(例如 Laravel),我认为这也适用于 Spring Boot。现在我发现,情况并非如此。

我看到一篇关于 Spring Environment API 的帖子,开始说环境变量 SPRING_DATASOURCE_URL 相当于在我的应用程序中设置 spring.datasource.url。但是,这对我也不起作用。

有没有什么快速的方法可以使用在 .env 文件中声明的变量?

如果可能的话,我想在 application.properties 中这样使用它。 spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}

【问题讨论】:

  • 它适用于环境或任何其他变量但是不支持 .env 文件,因为这些文件没有作为环境变量公开。
  • 您有其他解决方案吗?例如,我想通过配置文件运行在本地运行它,但是当它与 docker 一起使用时,我想通过设置属性。操作系统环境变量。
  • 您可以拥有多个配置文件,为每个配置文件设置不同的变量值并在启动时加载它们
  • 公开常规环境变量开箱即用。只有那个 .env 文件不受支持。一个 docker 环境变量就可以了。
  • 因此,如果我希望它与 dev 中的纯 application.properties 文件和 prod 中的 env-variables 一起使用,我可以创建一个具有绝对值和 application-prod 的 appilaction-dev.properties。使用 ${VAR_NAME} 语法的属性?

标签: java spring spring-boot


【解决方案1】:

.env 是 Python 的方式。如果你使用 spring cloud,你可以从 configServer 读取 env 变量,然后将它们注入到 application.properties 中。

  1. 在 pom.xml 中添加一些依赖项

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
  1. 定义一个 yml 来定位配置服务器。例如,称为 myBootstrap.yml
spring:
  cloud:
    config:
      fail-fast: true
      uri: http://[config-server-git]
      name: cc
      profile: config
      label: maste
  1. 定义一个名为 cc-config.properties 的文件并将其推送到 config-server git。环境变量写在这个属性中。

  2. 使用以下方式运行应用程序jar

java -jar [your-application-jar] --spring.cloud.bootstrap.location=myBootstrap.yml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2020-09-15
    • 2017-12-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2021-02-09
    • 2014-01-07
    相关资源
    最近更新 更多