3

我继承的应用程序由从 shell 脚本中使用 -D 选项传入的属性文件配置:

*-Dcom.gtnet.systemProperties.override.url=文件:/usr1/app/gtx/config/override.properties_$INST*

我们运行此应用程序的多个并发实例,目前每个实例都有一个单独的属性文件。每个文件的唯一区别是日志文件的名称。因此,我们最终得到了分布在许多服务器上的多个几乎相同的文件。

我的问题是,有什么方法可以参数化或扩展属性文件,以便我们可以传入实例的名称并在文件中使用它?因此,我们每台服务器只有一个文件。我们没有修改应用程序代码的选项,我们需要在应用程序启动时传入文件。

4

2 回答 2

1

内置java.util.Properties#load(...)既不支持#includes也不支持变量替换。

如果您碰巧知道应用程序没有使用Properties.load,而是它自己的逻辑,您可以查看是否这样做......但除非现有支持,否则您将不得不修改应用程序代码。

由于您提到修改应用程序代码不是一种选择......您应该考虑使用属性文件生成器,并管理用于生成属性文件的模板。因此,您仍然有一堆完全扩展的属性文件,但它们将使用一个模板文件、可能是参数值文件和属性文件生成器来掌握。

于 2012-06-19T17:50:24.937 回答
1

Java 对此不提供支持。如果您确实无法更改应用程序,则可以使用启动器将其包装起来,该启动器将读取参数化的属性文件,解析参数,并写出已解析参数的临时属性文件;然后使用该临时文件调用您的应用程序。

于 2012-06-19T18:28:08.303 回答