是否有任何方法可以将系统属性转移到子流程



我正在编写一个程序,该程序以以下模式形成一个新的子进程:

proc = java.lang.Runtime.getRuntime().exec("java -jar Xxx.jar");

虽然环境变量是自动继承到子进程的,但我认为-D<name of property>=<value of the property>定义的系统属性不是。

我的问题是,是否有任何方法可以通过编程方式传输系统属性。欢迎任何意见或回答。谢谢

我提出的一个解决方案是定义一组要传递给子流程的属性,并从中创建-D<key>=<value>字符串。

static String[] properties_to_pass = {
    "log4j.configuration"
};

上面是要传递的一组系统属性。然后。。。

StringBuffer properties = new StringBuffer();
for ( String property : properties_to_pass ) {
    String value = System.getProperty(property);
    if ( value != null ) {
        String r = String.format("-D%s=%s ", property, value);
        properties.append( r );
    }
}

在以上内容之后。。。

String command_arg = properties.toString();
String command = String.format("java %s -jar Torpedo.jar", command_arg);
java.lang.Runtime.getRuntime.exec( command );

非常天真的解决方案,但无论如何都有效。但仍然不确定是否有更好的解决方案。欢迎任何进一步的评论。

如果您正在使用Java 1.5+,强烈建议使用ProcessBuilder来创建流程,因为它允许使用许多方便的方法来实现您正在尝试的内容。

您可以通过ProcessBuilder实现系统属性的共享,如下所示。

Properties props = System.getProperties();
ProcessBuilder builder = new ProcessBuilder(new String[] {"java", "-jar","Xxx.jar"});
Map<String, String> env = builder.environment();
for(String prop:props.stringPropertyNames()) {
    env.put(prop, props.getProperty(prop));
}
Process process = builder.start();

使用子进程中的此代码,您可以使用System.getProperty方法访问父进程中使用-D传递的任何系统属性。

相关内容

最新更新