【问题标题】:configuring properties for dependent artifacts from inside a war从战争内部配置依赖工件的属性
【发布时间】:2018-03-26 10:26:17
【问题描述】:

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

这个应用程序依赖于(maven dep)一个打包为 JAR 的 java 库。

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

lib 接受后端的基本 uri (host+port+context-path) 作为配置。

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

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

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

更新 1

如果 jee 应用程序在每个环境(dev、test、prod)中包含一个属性文件,并且可以通过普通的旧 java 构造函数将属性传递给 lib,该怎么办?

【问题讨论】:

  • 那么,您是否正在寻找一种非 JEE 方式来配置 JEE 应用程序?问题2:base URI是如何传递给lib的?它可能提供自己的配置方式吗?还是基于 Java 的?
  • 我想说我正在寻找一种方法来提供我们都可以理解的普通旧 Java 和 jee 的配置。我是 lib 和 war 的作者,所以我可以根据需要更改它们。 ATM lib 是通过 jar 中嵌入的 prop 文件配置的,但这不够灵活,因为客户端战争的不同部署需要能够提供不同的配置。

标签: java jakarta-ee jar java-8 war


【解决方案1】:

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

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

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

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

如果您使用 Spring 或类似的框架,您还有很多其他可能性来为应用程序提供配置。 Spring Boot 在这方面提供了一些开箱即用的好行为。

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

【讨论】:

  • 谢谢拉尔斯。我在想一个类似的解决方案。昨天我按照您的方法实施了一个;我的客户为每个环境保存一个属性文件来配置库。在 lib 中,我根据环境变量从类路径中读取了相应的属性文件。
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2014-05-17
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
相关资源
最近更新 更多