Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法为PocessBuilder程序远程连接到JMX_Java_Spring_Jmx_Jconsole - Fatal编程技术网

Java 无法为PocessBuilder程序远程连接到JMX

Java 无法为PocessBuilder程序远程连接到JMX,java,spring,jmx,jconsole,Java,Spring,Jmx,Jconsole,我们在通过远程通过jmx连接时遇到问题。我们通过ProcessBuilder按程序运行作业 代码段: 进程正在启动,但当我们试图通过远程将其与jconsole连接时,它没有连接。。。连接失败消息即将出现: Remote connection URL: service:jmx:rmi:///jndi/rmi://A.B.C.D:9875/jmxrmi 我们的尝试: 添加了-Djava.rmi.server.hostname=A.B.C.D和 -Dcom.sun.management.jmxrem

我们在通过远程通过jmx连接时遇到问题。我们通过ProcessBuilder按程序运行作业

代码段: 进程正在启动,但当我们试图通过远程将其与
jconsole
连接时,它没有连接。。。连接失败消息即将出现:

Remote connection URL: service:jmx:rmi:///jndi/rmi://A.B.C.D:9875/jmxrmi
我们的尝试:

  • 添加了
    -Djava.rmi.server.hostname=A.B.C.D

    -Dcom.sun.management.jmxremote.local.only=false
  • ProcessBuilder.getEnv()
    并添加了我们的环境属性
  • 当我们通过命令提示符运行同一程序时:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9875 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -cp C:\jobs\abc.jar org.springframework.batch.core.launch.support.CommandLineJobRunner
    
    它正在运行,并且能够通过远程设备使用上述相同的URL与
    jmx
    连接


  • 欢迎提出任何建议/解决方法

    每个
    -D
    选项都需要是
    ProcessBuilder
    的单独参数:

    ProcessBuilder pb = new ProcessBuilder("java",
        "-Dcom.sun.management.jmxremote",
        "-Djava.rmi.server.hostname=A.B.C.D",
        // etc. etc.
        "-cp", jobArtifact.getAbsolutePath(),
        "org.springframework.batch.core.launch.support.CommandLineJobRunner");
    final Process process = processBuilder.start();
    

    您当前的代码将所有属性连接到一个参数中,实际上是将一个名为
    “com.sun.management.jmxremote-Djava.rmi.server.hostname”
    的属性设置为
    “A.B.C.D-Dcom.sun.management.jmxremote.port=9875-Dcom.sun.management.jmxremote.local.only=false-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false”
    (包括尾随空格)。

    试试
    -Dcom.sun.management.jmxremote=true
    谢谢Peter。我试过了,但没有成功(谢谢Ian,我用参数修改了代码,现在添加了参数print pb[java,-cp,c:\batch\jobs\autodata-imp-slave-example-0.0.1-SNAPSHOT.jar,org.springframework.batch.core.launch.support.CommandLineJobRunner,application-context.xml,sampleJob1,--Dcom.sun.management.jmxremote.ssl=“false”,-Dcom.sun.management.jmxremote=“true“,-Dcom.sun.management.jmxremote.port=“9875”,-Dcom.sun.management.jmxremote.authenticate=“false”]但JMX remote仍然被禁用,无法通过remote将其连接到。此外,我可以连接与本地进程相同的程序。@RishabhPandey将您的版本与我的版本进行比较-
    -D
    选项必须位于类名
    org.springframework.batch.core.launch.support.CommandLineJobRunner
    之前,并且不能有周围的引号(应该是
    -Dcom.sun.management.jmxremote.ssl=false
    ,而不是
    -Dcom.sun.management.jmxremote.ssl=“false”
    )谢谢你,伊恩。我已经按照你的建议添加了JVM参数,只是按照这个顺序进行了少量更新,以便在命令中放置JVM参数-Dcom.sun.management.jmxremote,-Dcom.sun.management.jmxremote.port=9875,-Dcom.sun.management.jmxremote.ssl=false。按照这个顺序设置后,它对我有效。
    ProcessBuilder pb = new ProcessBuilder("java",
        "-Dcom.sun.management.jmxremote",
        "-Djava.rmi.server.hostname=A.B.C.D",
        // etc. etc.
        "-cp", jobArtifact.getAbsolutePath(),
        "org.springframework.batch.core.launch.support.CommandLineJobRunner");
    final Process process = processBuilder.start();