我有几个系统都需要将相同的属性加载到JVM。我可以使用-D标志一次加载一个属性,但我正在寻找能够一次加载整个文件中的所有属性的东西。例如:
我可以将--options-file = blah.properties添加到我网络上的所有jvms,一次,然后只更改属性文件,该文件可以是网络共享上的单个中央文件。
谢谢,
编辑:任何参数或命令也必须在Windows环境中工作。因此,任何特定于unix的bash或脚本黑客都行不通。
答案 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)
一些选项:
getClass().getResourceAsStream()
我通常使用Spring(也用于其他原因)和PropertyPlaceholderConfigurer来解决这个问题。这允许我为属性文件指定一个或多个位置,并就地修改Spring配置。
答案 3 :(得分:0)
如果您使用Ant来处理Java进程,9000的答案(以及他的Windows注释)将起作用,并且您可以让启动程序处理操作系统差异。
StackOverflow线程here描述了如何从ant
确定操作系统