【问题标题】:Profile specific properties vs Environment variables配置文件特定属性与环境变量
【发布时间】:2017-10-29 08:41:48
【问题描述】:

使用 Spring-boot,我们可以将不同环境的配置参数存储在 Profile 特定的属性文件中,但是这使得 config 成为代码的一部分,这是 12-factor 原则不推荐的。

而是环境中的12 -factor recommends storing config(这里的config特指参数值因环境而异的参数)。

将配置存储在环境与特定于配置文件的属性文件中的优点/缺点是什么?

【问题讨论】:

标签: spring spring-boot config development-environment 12factor


【解决方案1】:

代码中的配置

优点:

  1. 单点真实性,因为所有属性都位于一个位置,团队中的每个人都可以轻松访问。当所有配置都在一个地方时,比较不同的环境会更容易。
  2. 版本控制系统跟踪环境属性的所有更改。您可以在提交消息中描述更改的原因。
  3. 您可以在构建过程中通过自动化测试验证属性的正确性,并避免使用无效配置启动应用程序。

缺点:

  1. 更改配置(即使是单个环境)需要重新构建整个应用程序。
  2. 版本控制系统可用于存储敏感的身份验证信息,例如数据库密码。即使加密形式保留这些值也可能存在风险。
  3. 如果您的组织限制常规开发人员访问生产环境,并且有专门的操作团队专门负责此角色,那么开发团队可能没有将它们放入代码存储库所需的所有配置详细信息。

环境中的配置

优点:

  1. 更改配置不需要额外的应用程序重建。
  2. 敏感信息不存储在版本控制系统中。
  3. 可以实现运行时配置更新。

缺点:

  1. 必须在启动应用程序时验证配置。如果部署不是由开发团队以外的人自动执行和执行,则尤其重要。
  2. 配置更改的历史可能不像使用版本控制系统那样清晰。代码和配置更改之间的联系丢失了。
  3. 如果不知道问题发生时应用程序的确切配置,可能无法重现错误。跟踪外部配置更改是一项更复杂的任务。

没有什么是非黑即白的,您始终可以使用混合两种方法的折衷解决方案。您的配置的一部分可能适合与源代码一起保存,而另一部分可能保存在外部。像往常一样编程,这取决于您的需求。

【讨论】:

  • 非常感谢详细回答,关于“版本控制系统可能用于存储敏感的身份验证信息,例如数据库密码。即使加密形式可能存在风险,也要保留这些值。” ,而不是实际的加密密码,可以将秘密存储在秘密服务器中,并将指向秘密的链接放在属性文件中。
  • on "如果您的组织限制了普通开发人员对生产环境的访问权限,并且有一个专门的操作团队专门负责这个角色,那么开发团队可能没有所有需要的配置细节来将它们放入代码中存储库。” ,是的,我们有专门的产品基础架构团队,您能否举例说明常规开发人员可能没有的配置细节?
  • 例如存储应用程序日志或某些凭据的位置的路径。
  • "配置更改的历史可能不像使用版本控制系统那样清晰。代码和配置更改之间的连接丢失了。"也可以(可能应该)使用版本控制进行配置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多