Java 将整个文件传递给JVM参数
我有几个系统都需要将相同的属性加载到JVM。我可以使用-D标志一次加载一个属性,但我正在寻找一种可以一次加载整个文件中所有属性的方法。例如: 我可以只向网络上的所有JVM添加一次--options file=blah.properties,从那时起只更改属性文件,它可以是网络共享上的单个中心文件 谢谢, 编辑:任何参数或命令也必须在windows环境中工作。因此,任何特定于unix的bash或脚本攻击都不会起作用。一些选项:Java 将整个文件传递给JVM参数,java,jvm,jvm-arguments,Java,Jvm,Jvm Arguments,我有几个系统都需要将相同的属性加载到JVM。我可以使用-D标志一次加载一个属性,但我正在寻找一种可以一次加载整个文件中所有属性的方法。例如: 我可以只向网络上的所有JVM添加一次--options file=blah.properties,从那时起只更改属性文件,它可以是网络共享上的单个中心文件 谢谢, 编辑:任何参数或命令也必须在windows环境中工作。因此,任何特定于unix的bash或脚本攻击都不会起作用。一些选项: 将属性包装到.jar文件中,然后让进程从getClass().getR
getClass().getResourceAsStream()读取该属性文件。
我通常通过使用Spring(也用于其他原因)和a来解决这个问题。这允许我为属性文件指定一个或多个位置,并在适当的位置修改Spring配置。我们大致就是这样做的:
java$(tr'\n'
这里的
选项\u文件
包含ready-Dsomething
或-Xsomething
值,每行一个。tr
命令只是用空格替换每条换行符 我不认为您可以通过命令行来实现这一点(也许没有一些bash黑客),但您肯定可以通过编程实现这一点:
只需设置一个属性-DmyPropertiesFile=/your/properties/file.properties
,然后使用其中一个properties.load()
重载读取该属性。在这之后,System.setProperties(yourProps)
应该做您期望的事情
当然,这要求您可以尽早挂接此代码,以便在需要时可以使用您的属性(例如,如果
main()
方法是您的,这是完美的)。如果您使用Ant来访问Java进程,9000的答案(加上他的windows注释)将起作用,您可以让启动器处理操作系统的差异
有一个StackOverflow线程,描述如何从antgetClass()确定操作系统。getResourceAsStream()是应用程序启动后在应用程序内部执行的操作,对吗?在任何应用程序启动之前,我需要这样做。我认为这不会起作用,因为web应用程序和log4j应用程序都需要访问相同的变量…@doug:不会的。在windows下,您需要像/S delim=…这样的东西,但windows提供了一种逐行读取文件的方法;您将这些行添加到环境变量中。好的,我将尝试一下。谢谢