如何获取传递给 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());
    }
}