如何获取传递给 Java launch 的 -D 参数
How can I obtain the -D parameters passed in to Java launch
我将某些 -D 环境变量作为 VM 选项传递给 Java 服务器应用程序。
我需要从应用程序中检索这些变量,但是当我使用 System.getProperties() 时,我得到了所有这些,加上在操作系统级别定义的所有系统属性,而我不是有兴趣。
有什么方法可以只发现 -D 参数吗?
这在 VM 提供的 RuntimeMXBean
中可用。您可以通过 getInputArguments()
调用获得命令行参数列表...
import java.lang.management.ManagementFactory;
public class CmdLine {
public static void main(String... args) {
System.out.println(ManagementFactory.getRuntimeMXBean().getInputArguments());
}
}
你可以通过RuntimeMXBean(Java虚拟机运行时系统的管理界面)获取,像这样
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
List<String> args = bean.getInputArguments();
请注意getInputArguments()
Returns 传递给 Java 虚拟机的输入参数不包括 main 方法的参数。如果 Java 虚拟机没有输入参数,则此方法 returns 一个空列表。
您最好的选择是为您正在使用的属性使用一个特殊的前缀,以便您可以将它们与其他属性区分开来:java -Dfoo.bar=x -Dfoo.bat=y -Dfoo.baz=z ...
,然后:
for(Map.Entry<String,String> kv: System.getProperties().entrySet()) {
if(kv.getKey().starts with("foo")) {
System.out.println("Command line property " + kv.getKey() + "=" + kv.getValue());
}
}
我将某些 -D 环境变量作为 VM 选项传递给 Java 服务器应用程序。
我需要从应用程序中检索这些变量,但是当我使用 System.getProperties() 时,我得到了所有这些,加上在操作系统级别定义的所有系统属性,而我不是有兴趣。
有什么方法可以只发现 -D 参数吗?
这在 VM 提供的 RuntimeMXBean
中可用。您可以通过 getInputArguments()
调用获得命令行参数列表...
import java.lang.management.ManagementFactory;
public class CmdLine {
public static void main(String... args) {
System.out.println(ManagementFactory.getRuntimeMXBean().getInputArguments());
}
}
你可以通过RuntimeMXBean(Java虚拟机运行时系统的管理界面)获取,像这样
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
List<String> args = bean.getInputArguments();
请注意getInputArguments() Returns 传递给 Java 虚拟机的输入参数不包括 main 方法的参数。如果 Java 虚拟机没有输入参数,则此方法 returns 一个空列表。
您最好的选择是为您正在使用的属性使用一个特殊的前缀,以便您可以将它们与其他属性区分开来:java -Dfoo.bar=x -Dfoo.bat=y -Dfoo.baz=z ...
,然后:
for(Map.Entry<String,String> kv: System.getProperties().entrySet()) {
if(kv.getKey().starts with("foo")) {
System.out.println("Command line property " + kv.getKey() + "=" + kv.getValue());
}
}