【问题标题】:Should Spring Profiles be used as direct replacement for environments in environment bound applications?Spring Profiles 是否应该直接替代环境绑定应用程序中的环境?
【发布时间】:2018-01-30 20:46:53
【问题描述】:

我已经阅读 Spring Boot 文档有一段时间了。我对 Spring Profiles 的理解是它们习惯于

隔离应用程序配置的各个部分并使其仅在某些环境中可用

现在,我们的应用程序有多个环境,例如 dev、test、uat,并且 profile 的使用确实有助于我们隔离环境绑定变量,例如数据库 URL、下游服务 URL。一切都很好,但问题是,Spring 允许同时激活多个配置文件

spring.profiles.active

这与环境形成直接对比,例如:我的应用程序只能在 dev 或 uat 中运行,但不能同时在两者中运行。这就是为什么我要询问是否直接使用 Spring 配置文件作为环境。我是否应该为我们的应用程序制定一条规则,即永远不应该同时激活两个配置文件。

【问题讨论】:

  • 这取决于您希望为应用程序的用户提供多少支持。知道不允许为您的应用程序激活 2 个配置文件会很有帮助。至少它应该被记录在案,但是如果你想抛出一个带有有用异常消息的异常是非常主观的。
  • @YannicKlem 是的,我可以做到。但是,我想知道这样做是否好。如果没有,那么我应该如何将配置文件与环境映射
  • 我会使用配置文件,因为我不知道配置文件的任何替代方案来实现您想要的。我不会验证只有一个配置文件是明确激活的。在我看来,在配置部分记录这一点就足够了。
  • 我宁愿只在配置文件处于活动状态且允许同时处于活动状态时才允许我的配置运行。
  • 只是为了防止你落入和我一样的陷阱:你在@Profile中指定的值是由逻辑或而不是与;)

标签: java spring spring-boot spring-profiles


【解决方案1】:

Spring Boot 允许同时创建多个不同的配置文件,以防您需要跨场景区分。

例如一个可以在 MySQL 或 Postgres 中实现的系统,但你想要有一个用于测试和生产的案例,在这种情况下你将有 4 个案例。

在您使用spring.profiles.active 的情况下,您只需编写您需要的个人资料之一

希望能帮到你

【讨论】:

  • 我想作者已经意识到了这一点。他在询问@Profiles 的替代方案,因为他不确定一次只允许一个个人资料处于活动状态是否正确。
  • 那么正如您所说的@YannicKlem 使用@Profile 注释将是定义它的最佳方式,感谢您的更正。如果他使用 Spring Boot 为每个配置文件定义一个属性文件也是一种选择:在我的情况下,我有 application-prod.properties 和一个 application-dev.properties,只会在设置了一个配置文件的情况下执行系统,Spring Boot将单独处理它并获得适当的属性
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多