Java 无法为PocessBuilder程序远程连接到JMX
我们在通过远程通过jmx连接时遇到问题。我们通过ProcessBuilder按程序运行作业 代码段: 进程正在启动,但当我们试图通过远程将其与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
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();