将整个文件传递给JVM参数

时间:2011-02-01 18:19:40

标签: java jvm jvm-arguments

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

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

谢谢,

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

4 个答案:

答案 0 :(得分:7)

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

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

此处options_file包含准备好的-Dsomething-Xsomething值,每行一个。 tr命令只是用空格替换每个换行符。

答案 1 :(得分:7)

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

只需设置一个属性-DmyPropertiesFile=/your/properties/file.properties,然后使用其中一个Properties.load()重载进行读取。在那之后,System.setProperties(yourProps)应该做你期望的事。

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

答案 2 :(得分:3)

一些选项:

  1. 在.jar文件中包装您的属性,然后让您的进程从getClass().getResourceAsStream()
  2. 读取该属性文件
  3. 编写批处理文件以执行Java进程,并显式列出-D选项,或动态创建命令行。
  4. 我通常使用Spring(也用于其他原因)和PropertyPlaceholderConfigurer来解决这个问题。这允许我为属性文件指定一个或多个位置,并就地修改Spring配置。

答案 3 :(得分:0)

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

StackOverflow线程here描述了如何从ant

确定操作系统