将整个文件传递给JVM参数

我有几个系统都需要将相同的属性加载到JVM。 我可以使用-D标志一次加载一个属性,但我正在寻找能够一次加载整个文件中的所有属性的东西。 例如:

我可以将–options-file = blah.properties添加到我的网络中的所有jvms上,然后从那时起只更改属性文件,该文件可以是网络共享上的单个中央文件。

谢谢,

编辑:任何参数或命令也必须在Windows环境中工作。 因此,任何特定于unix的bash或脚本黑客都行不通。

这大致就是我们这样做的方式:

java $(tr '\n' ' ' < options_file) other args...

这里的options_file包含ready -Dsomething-Xsomething值,每行一个。 tr命令只是用空格替换每个换行符。

我不认为你可以通过命令行做到这一点(也许没有一些bash hacks),但你绝对可以以编程方式做到这一点:

只需设置一个属性-DmyPropertiesFile=/your/properties/file.properties ,然后使用其中一个Properties.load()重载读取它。 之后, System.setProperties(yourProps)应该按照您的预期进行操作。

当然,这要求您可以尽早挂钩此代码,以便在需要时可以使用您的属性(例如,如果main()方法是您的,那么这是完美的)。

一些选择:

  1. 将您的属性包装在.jar文件中,然后让您的进程从getClass().getResourceAsStream()读取该属性文件getClass().getResourceAsStream()
  2. 编写批处理文件以执行Java进程,并显式列出-D选项,或动态创建命令行。

我通常使用Spring(也用于其他原因)和PropertyPlaceholderConfigurer来解决这个问题。 这允许我为属性文件指定一个或多个位置,并就地修改Spring配置。

如果您使用Ant来处理Java进程,9000的答案(以及他的Windows注释)将起作用,并且您可以让启动程序处理操作系统差异。

这里有一个StackOverflow线程,描述了如何从ant确定操作系统