配置文件特定属性与环境变量

Profile specific properties vs Environment variables

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

而是12 -factor recommends storing config(这里的config特指在不同环境下取值不同的参数)

什么是 pros/cons 在环境中存储配置与特定于配置文件的属性文件?

代码中配置

优点:

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

缺点:

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

环境配置

优点:

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

缺点:

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

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