在 Java / Spring Boot 应用程序中在开发和生产环境之间切换?

问题描述 投票:0回答:1

在我的 Spring Boot 应用程序中,我刚刚开始使用不同的环境进行开发,并且对正确的切换步骤和场景感到非常困惑。

还有一些文件我无法完全理解,因为网络上有一些关于这些文件的相互冲突的信息。

您能帮我解释一下以下这些问题吗?

1) 据我所知,我们可以通过应用程序属性中的以下设置来设置环境。这是真的吗?还有其他方法可以切换环境吗?

spring:
  profiles:
    active: production

2) 还有另一个名为

.env
的文件,我认为还有不同的版本,例如
.env-dev
。据我所知,它是用来定义环境变量的。但是,例如,当我从 IntelliJ 运行应用程序时,我不确定 IntelliJ 是否应该从中读取变量并在运行应用程序时使用。我该如何使用这个文件?

基于这两个问题,您基本上可以给出一个示例场景来设置开发和生产环境并在它们之间进行切换。任何帮助将不胜感激。

java spring spring-boot environment-variables development-environment
1个回答
3
投票
  1. 是的,您可以使用

    spring.profiles.active
    ,但您可能不应该使用,因为您在
    application.yml
    中指定了它,这应该与配置文件无关。相反,正如他们在评论中指出的那样,最好依靠例如
    --spring.profiles.active=dev
    这将告诉 Spring Boot 使用
    application.yml
    application-dev.yml
    中的属性。

  2. 我根本不会使用这个文件并依赖

    application.yml
    ,因为两个主要原因:

  • 您可以从 Gradle、Maven、IntelliJ、命令行运行应用程序,对于所有这些情况,您需要以不同的方式处理环境变量
  • 您可以在单独设置环境变量的各种操作系统上运行您的应用程序

如果我要解决您的开发和生产环境问题,我会创建三个文件:

  • application.yml 用于在所有配置文件中共享的道具
  • 用于开发道具的application-dev.yml
  • 用于产品道具的application-prod.yml

然后我通过指定 --spring.profiles.active=dev|prod`

在配置文件之间切换

附注至于您在评论中提出的问题:

  1. 如果您使用
    --spring.profiles.active=dev
    指定配置文件并且有一个属性,例如
    server.port
    application.yml
    application-dev.yml
    中,将使用
    application-dev.yml
    中的值。所以你可以覆盖属性。这是覆盖属性的标准技术。
  2. 嗯,我不知道你如何使用
    .env
    文件中的属性。通常,操作系统级别的环境变量在 Java 中使用
    System.getProperty(String)
    进行访问。此外,某些框架的使用意味着指定了某些属性,例如Apache Spark 通常需要
    HADOOP_HOME
    。因此删除这些
    .env
    文件可能会很危险。
  3. 对于秘密,您可以使用 Vault。这个想法是,您可以为它们指定一个密钥,而不是凭证或其他敏感数据,并且应用程序使用该密钥在运行时从保管库中获取机密。即使配置文件泄漏,这也可以保护数据。
© www.soinside.com 2019 - 2024. All rights reserved.