10

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

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

谢谢,

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

4

4 回答 4

8

我们大致是这样做的:

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

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

于 2011-02-01T18:32:34.583 回答
8

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

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

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

于 2011-02-01T18:33:15.613 回答
3

一些选项:

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

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

于 2011-02-01T18:31:52.653 回答
0

如果您使用 Ant 启动 Java 进程,9000 的答案(加上他的 windows 注释)将起作用,您可以让启动器处理操作系统差异。

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

于 2013-05-14T16:47:09.353 回答