在应用程序启动时参数化Java属性文件

时间:2012-06-19 17:25:42

标签: java shell properties

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

Java没有这方面的支持。如果你真的无法更改应用程序,可以使用启动器将其包装,该启动器将读入参数化属性文件,解析参数,并写出一个参数已解析的临时属性文件;然后使用该临时文件调用您的应用程序。