在应用程序启动时参数化Java属性文件
我继承的应用程序由一个属性文件配置,该文件通过shell脚本中的-D选项传入: *-Dcom.gtnet.systemProperties.override.url=文件:/usr1/app/gtx/config/override.properties_$INST* 我们运行这个应用程序的多个并发实例,目前每个实例都有一个单独的属性文件。每个文件的唯一区别是日志文件的名称。因此,我们最终得到了分布在多个服务器上的多个几乎相同的文件 我的问题是,是否有任何方法可以参数化或扩展属性文件,使我们只需传入实例的名称并在文件中使用它?因此,每个服务器只有一个文件。我们没有修改应用程序代码的选项,我们需要在应用程序启动时传入文件。内置既不支持在应用程序启动时参数化Java属性文件,java,shell,properties,Java,Shell,Properties,我继承的应用程序由一个属性文件配置,该文件通过shell脚本中的-D选项传入: *-Dcom.gtnet.systemProperties.override.url=文件:/usr1/app/gtx/config/override.properties_$INST* 我们运行这个应用程序的多个并发实例,目前每个实例都有一个单独的属性文件。每个文件的唯一区别是日志文件的名称。因此,我们最终得到了分布在多个服务器上的多个几乎相同的文件 我的问题是,是否有任何方法可以参数化或扩展属性文件,使我们只需传
#包含也不支持变量替换
如果您碰巧知道应用程序没有使用Properties.load
,而是它自己的逻辑,那么您可以查看is是否这样做。。。但是,除非现有支持,否则您必须修改应用程序代码
既然您提到修改应用程序代码不是一个选项。。。您应该考虑使用属性文件生成器,并管理用于生成属性文件的模板。因此,您仍然有一堆完全扩展的属性文件,但它们将使用一个模板文件(可能是一个参数值文件)和属性文件生成器来控制。Java不支持此功能。如果你真的无法更改应用程序,你可以使用启动器将其包装起来,该启动器将读取参数化属性文件,解析参数,并写出一个临时属性文件,其中包含已解析的参数;然后使用该临时文件调用应用程序。您不能使用系统属性吗?就像在linux中一样,导出INST=1
,并将其与您在其中使用的命令-Dcom.gtnet.systemProperties.override.url=文件:/usr1/app/gtx/config/override.properties_$INST*