从 war 内部配置依赖工件的属性

configuring properties for dependent artifacts from inside a war

我正在编写一个作为 WAR 部署到容器的 jee 应用程序。

此应用依赖于 (maven dep) 打包为 JAR 的 java 库。

该库包含 jee 应用程序用来与后端对话的客户端。

该库接受后端的基本 uri(主机+端口+上下文路径)作为配置。

从 jee 应用程序配置库的最佳方法是什么 以便可以为多个环境提供配置(例如,后端生产 URI 与测试 URI 不同)?

我阅读了关于@Alternative 注释和 ContextParam 的内容,但两者似乎都是 jee 特定的 AKA,普通人无法理解 java...

Maven Assembly 似乎不是可行的方法,因为它意味着必须为每个环境部署一个工件到我们的 Maven 存储库。

更新 1

如果 jee 应用在每个环境(开发、测试、生产)中包含一个属性文件,并且可以通过普通的旧 java 构造函数将属性向下传递到 lib,会怎么样?

我将尝试为该主题提供一些答案/想法。我会遵循这种方法:

  • 在库中提供后备配置文件。
  • 在库中实现默认行为,在类路径上查找预定义的配置文件,该文件的优先级高于回退(例如通过 java.lang.Class.getResourceAsStream(String)
  • 让库提供 Java-API 从不同的位置/资源读取配置。
  • 让库提供 Java-API 以直接从客户端代码更改特定的配置设置。
  • 您还可以提供通过系统环境变量和/或命令行参数配置库的可能性。

这样,库的客户可以根据他们的技术环境决定配置所在的位置。

在 JEE 中,您可以使用 ContextParam 来设置配置资源的位置,或者设置特定的配置属性,或者只是在类路径的标准位置提供配置资源。

如果您使用 Spring 或类似的框架,您有许多其他可能性来为应用程序提供配置。 Spring Boot 对此提供了一些很好的行为 out-of-the-box。

基本思想是您必须向应用程序的操作员提供影响配置的方法。然后可以根据它是 运行 在开发人员的机器上、在单元/集成测试条件下、在暂存环境中还是在生产中来调整配置。