【问题标题】:Parameterizing Java properties file at application launch在应用程序启动时参数化 Java 属性文件
【发布时间】:2012-06-19 17:25:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您不能使用系统属性吗?就像在 linux export INST=1 中一样,并将它与您使用 -Dcom.gtnet.systemProperties.override.url=file:/usr1/app/gtx/config/override.properties_$INST* 的命令一起使用

标签: java shell properties


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多