【问题标题】:12 factor app config and Java12 因素应用程序配置和 Java
【发布时间】:2023-03-08 01:47:02
【问题描述】:

我正在阅读 12 要素应用宣言 http://12factor.net/。宣言建议将应用程序的配置数据存储在环境变量中。这是否意味着数据库用户名/密码、资源 URL 等属性应该存储为 Java Env 变量的一部分而不是属性文件?这是一种安全的信息存储方式吗?对我来说,这似乎是一种非常笨重的信息存储方式。 有没有可以分享的最佳实践/经验?

我能想到的一个选择是在景观中运行一个单独的配置服务,并使用 Env 属性连接到配置服务,然后查询配置服务以获取更多详细的配置数据。

【问题讨论】:

  • 这似乎更适合 Programmers.SE 而不是这里。
  • 此问题属于 Stack Exchange 网络中的另一个站点,但默认情况下,programmers.se 不是一个选项。

标签: java config 12factor


【解决方案1】:

12 要素应用程序旨在在协调独立 UNIX 进程的平台上运行。 UNIX 进程是通过环境变量配置的。虽然属性文件是一种成熟的 Java 约定,但 UNIX 进程是一种与语言无关的进程配置方式。

要支持多种配置方法,一个好的最佳做法是:

  • 使用System.getenv('CONFIG') 从进程环境中读取,如果为空
  • 从属性文件中读取properties.getProperty('CONFIG'),如果为空
  • 回退到默认值

有关更多详细信息,请参阅 Heroku 在 defining config vars for Java apps 上的说明。

【讨论】:

  • 如果您使用的应用服务器(如 WAS Liberty)理解配置文件中指定的环境变量,您可以在应用程序代码(业务逻辑)之外进行类似处理,同时保留在生成的工件中.
  • 实际上,12factor 中重要的事情之一是拥有一个众所周知的配置源 - 同时拥有环境和配置文件可能不太理想。 IMO 拥有一个定义良好的配置源比它在环境中或(与语言无关的)配置文件中更重要
【解决方案2】:

我们可以使用 Spring 集中配置来做到这一点,使用集中配置我们可以将所有项目的配置提交到单个存储库中,稍后在编写构建脚本时,我们可以从该存储库覆盖我们的本地配置以使用该集中配置.

点击下面的链接,您将找到入门指南

https://spring.io/guides/gs/centralized-configuration/

【讨论】:

    【解决方案3】:

    这篇关于如何在 Java 中实现 12 因素配置的文章可能会有所帮助:https://blog.codacy.com/12-factor-config-for-java/

    它由自动代码审查工具 Codacy 发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多