为战争中的依赖工件配置属性

时间:2018-03-26 10:26:17

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

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

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

lib包含jee app用来与后端通信的客户端。

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

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

我读到了@Alternative注释和ContextParam,但两者看起来都是普通的java不能理解的特定的AKA ......

Maven Assembly似乎没有办法,因为它意味着每个环境必须部署到我们的maven repo一个工件。

更新1

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

1 个答案:

答案 0 :(得分:2)

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

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

这样,图书馆的客户可以决定配置所在的位置,具体取决于他们的技术环境。

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

如果使用Spring或类似的框架,则需要为应用程序提供配置。 Spring Boot为此提供了一些开箱即用的好方法。

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