gpt4 book ai didi

java - Java EE 7 属性文件配置的最佳实践建议是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:23 25 4
gpt4 key购买 nike

应用程序配置在现代 Java EE 应用程序中属于什么位置?人们有哪些最佳实践建议?

我所说的应用程序配置是指设置,例如与其他设备上的服务的连接设置,包括外部设备(例如 Twitter 和我们的内部 Cassandra 服务器……用于主机名、凭据、重试等内容)以及与业务相关的设置逻辑(人们可能想在类中存储为常量的东西,例如某物过期的天数等)。

假设:

  1. 我们正在使用单个 EAR 文件部署到 Java EE 7 服务器 (Wildfly 8.1),该文件包含多个 war 和一个 ejb-jar。
  2. 我们将部署到各种环境:单元测试、本地开发安装、UAT 的基于云的基础设施、压力测试和生产环境。 我们的许多属性会因这些环境而异。
  3. 如果这是人们推荐的最佳实践,我们不反对将属性配置耦合到 DI 框架。
  4. 所有这些都是为了新的开发,因此我们不必遵守旧的要求或限制。我们非常关注当前的现代最佳实践。

配置属于 EAR 内部还是外部?

如果 在 EAR 之外,在哪里以及如何最好地可靠地访问它们?

如果 EAR 中,我们可以将其存储在类路径中的任何位置,以便在执行期间轻松访问。但是我们必须在每次配置更改时重新组装(并且可能重新构建)。由于我们将拥有多个环境,因此我们需要一种方法来区分 EAR 中的文件。我在这里看到两个选项:

  1. 利用预期的文件名(例如 cassandra.properties),然后构建多个环境特定的 EAR(例如 appxyz-PROD.ear)。
  2. 构建一个 EAR(例如 appxyz.ear)并将我们所有的各种环境配置文件放入其中,为每个配置文件名附加一个环境变量(例如 cassandra-PROD.属性)。当然,还要添加一个环境变量(到虚拟机或其他),以便代码知道要拾取哪个文件。

人们可以推荐哪些最佳实践来解决这一常见挑战?

谢谢。

最佳答案

我不知道什么是最佳实践,但这是我们所做的。

(但是请注意,这只适用于每台服务器每个应用程序的一个安装,并且当有人想在每台服务器上使用多个部署时,例如 Multi-Tenancy 部署),这将失败。

属性值的 CDI 注入(inject)

我们使用一种稍微复杂的 CDI 注入(inject)方法从 .properties 注入(inject)配置值将文件直接放入 bean 中,如下所示:

@Inject @ConfigurationValue(value="amazonS3FileContentsAccessKey")
private String accessKey;

对应@Producer bean 从类路径和给定的“本地”位置读取配置文件:

全局/本地 .properties文件

  1. 每个 EAR 都包含一个“全局”.properties类路径上的文件,用于很少更改和/或通常在整个环境中保持一致的配置值(例如过期天数)。此外,全局配置文件包含合理的默认值(例如,数据库服务器主机名的“localhost”)。全局properties文件(有多个,见下文)在源代码树中维护。
  2. 对于每个开发环境/安装/服务器/部署,(可能)有一个“本地”属性文件,其中包含覆盖全局配置设置的本地设置,例如数据库名称、密码等。

“本地”属性文件的预期路径在全局配置文件中配置(例如 /etc/myapp/local.properties )或 C:\myapp\local.properties .

实际上,我们甚至允许在本地配置文件的文件名中替换一些变量,例如“${hostname}”。最初的想法是本地属性也可以通过主机名( local.machineA.propertieslocal.machineB.properties )区分它们而在某些中央源代码控制中维护,但我们目前不使用它,因为我们的生产设置是相同的在所有机器上(Amazon S3 key 、数据库密码/主机等)。

为开发、测试、生产组装

我们使用 Maven 配置文件根据开发阶段组装不同的 EAR。
在组装上,所需的 global.${profile.name}.properties文件(其中 profile.name 是,例如 devproduction )被复制到预期的 global.properties类路径中的文件。

例如,devtesting共享一个通用的 AmazonS3 secret /存储桶,在 configuration.dev.properties 中为所有开发人员配置一次文件,而 configuration.production.properties不包含我们的生产 key 。

此外,我们的 devtesting环境启用并配置了调试,比如 web.xml , 但当然 stagingproduction没有。我们的.properties基于的方法不能更改文件,例如 web.xml ,但使用 Maven 构建配置文件很容易。

关于java - Java EE 7 属性文件配置的最佳实践建议是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com