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

jv2fixgn  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(154)

在我的Sping Boot 应用程序中,我刚刚开始使用不同的开发环境,对正确的切换步骤和场景感到非常困惑。
也有一些文件,我不能完全理解,因为有几个冲突的信息在网络上关于这些文件。
您能否就以下这些问题向我澄清一下?

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

spring:
  profiles:
    active: production

**2)**还有一个叫.env的文件,我想也有不同的版本,比如.env-dev,据我所知,它是用来定义环境变量的,但是,比如我从IntelliJ运行应用的时候,我不确定IntelliJ是否应该从中读取变量,在运行应用的时候使用,我应该怎么使用这个文件?

基于这两个问题,你基本上可以给予一个示例场景来设置开发和生产环境,并在它们之间切换。

nuypyhwy

nuypyhwy1#

1.是的,你可以使用spring.profiles.active,但你可能不应该,因为你在application.yml中指定了这个,它应该是配置文件不可知的。相反,正如他们在评论中指出的,最好依赖--spring.profiles.active=dev,它会告诉Sping Boot 使用application.ymlapplication-dev.yml的属性。
1.我根本不会使用这个文件,而是依赖于application.yml,这主要有两个原因:

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

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

  • application.yml用于在所有配置文件上共享的 prop
  • 用于开发属性的应用程序-开发yml
  • 生产 prop 的应用-生产yml

然后,我将通过指定--spring.profiles.active=dev在配置文件之间切换|刺
P.S.截至您在评论中的问题:
1.如果你用--spring.profiles.active=dev and there's a property e.g. server.port in both application.yml and application-dev.yml the value from application-dev.yml '来指定一个配置文件,那么你可以覆盖属性,这是覆盖属性的标准技术。
1.嗯,我不知道你是如何使用.env文件中的属性的。通常在Java中使用System.getProperty(String)来访问操作系统级别的环境变量。此外,一些框架的用法暗示了指定了某个属性,例如Apache Spark通常需要HADOOP_HOME。因此删除这些.env文件可能会很危险。
1.对于机密,您可以使用Vault。其思想是,您为它们指定一个密钥,而不是凭据或其他敏感数据,应用程序在运行时使用此密钥从Vault中获取机密。这允许即使配置文件泄漏也能保护数据。

相关问题