将整个文件传递给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()
方法是您的,那么这是完美的)。
一些选择:
- 将您的属性包装在.jar文件中,然后让您的进程从
getClass().getResourceAsStream()
读取该属性文件getClass().getResourceAsStream()
- 编写批处理文件以执行Java进程,并显式列出-D选项,或动态创建命令行。
我通常使用Spring(也用于其他原因)和PropertyPlaceholderConfigurer来解决这个问题。 这允许我为属性文件指定一个或多个位置,并就地修改Spring配置。
如果您使用Ant来处理Java进程,9000的答案(以及他的Windows注释)将起作用,并且您可以让启动程序处理操作系统差异。
这里有一个StackOverflow线程,描述了如何从ant确定操作系统