我有几个系统都需要将相同的属性加载到 JVM。我可以使用 -D 标志一次加载一个属性,但我正在寻找能够一次加载整个文件中所有属性的东西。例如:
我可以一次将 --options-file=blah.properties 添加到我网络上的所有 jvm,然后只更改属性文件,这可能是网络共享上的单个中央文件。
谢谢,
编辑:任何参数或命令也必须在 Windows 环境中工作。因此,任何特定于 unix 的 bash 或脚本黑客都将不起作用。
我有几个系统都需要将相同的属性加载到 JVM。我可以使用 -D 标志一次加载一个属性,但我正在寻找能够一次加载整个文件中所有属性的东西。例如:
我可以一次将 --options-file=blah.properties 添加到我网络上的所有 jvm,然后只更改属性文件,这可能是网络共享上的单个中央文件。
谢谢,
编辑:任何参数或命令也必须在 Windows 环境中工作。因此,任何特定于 unix 的 bash 或脚本黑客都将不起作用。
我们大致是这样做的:
java $(tr '\n' ' ' < options_file) other args...
这里options_file
包含就绪-Dsomething
或-Xsomething
值,每行一个。该tr
命令只是用空格替换每个换行符。
我不认为你可以通过命令行来做到这一点(也许没有一些 bash hack),但你绝对可以通过编程方式做到这一点:
只需设置一个属性-DmyPropertiesFile=/your/properties/file.properties
,然后使用其中一个Properties.load()
重载读取它。在那之后,System.setProperties(yourProps)
应该做你所期望的。
当然,这要求您可以尽早挂钩此代码,以便您的属性在需要时可用(例如,如果main()
方法是您的,这是完美的)。
一些选项:
getClass().getResourceAsStream()
我通常通过使用 Spring(也用于其他原因)和PropertyPlaceholderConfigurer来解决这个问题。这允许我为属性文件指定一个或多个位置并就地修改 Spring 配置。
如果您使用 Ant 启动 Java 进程,9000 的答案(加上他的 windows 注释)将起作用,您可以让启动器处理操作系统差异。
这里有一个 StackOverflow 线程,它描述了如何从 ant 确定操作系统