繁体   English   中英

使用Spring Boot重新打包启用JMX

[英]Enable JMX with spring boot repackage

我想为我的Spring Boot应用程序启用JMX,并尝试了一切,但没有成功。 我认为问题是,我正在使用spring-boot-maven-pluginrepackage选项。

目前,我执行了以下操作:

export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1"
java -jar target/myapp-1.0.0.jar

但是,当我启动该应用程序时,它不会监听端口1617。我无法从JMX客户端连接,并且ss -tulpen也不会列出该端口。

我还尝试通过直接传递-D...参数来进行尝试。 我也用--com.sun...尝试过,并认为Spring boot可以这样处理它们。 我还在多台机器上尝试了许多其他事情,但没有成功。

一些进一步的信息:

  • 我的应用程序使用任何spring-boot家长。
  • 我正在ArchLinux系统上尝试此操作。
  • 我没有任何特殊的iptables配置,所有端口都应在配置的ip上可用。
  • 春季启动版本:1.4.1.RELEASE
  • Java版本: openjdk version "1.8.0_112"

我在做什么错,在哪里可以找到有关此问题的文档?

更新:我添加了阅读和打印的推移,一些线路JAVA_OPTS (如解释在这里 )。 当我通过IntelliJ启动应用程序并将VM选项从上方设置为JAVA_OPTS值时,它就可以工作。 打印通过的选项,并且VM正在监听端口1617。当我使用java -jar my.jar -Dcom.sun....启动应用程序时,不会打印参数,并且VM仍然不在监听端口1617。

问题解决了! 我仍然不知道为什么它不能与JAVA_OPTS但是我知道直接传递选项时我做错了:似乎我总是在-Dcom.sun...选项之前传递-jar ... -Dcom.sun...选项。 但是我现在发现:

这些选项的顺序至关重要!

什么? 真?

是!

因此,现在适合我的方式:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar my.jar

而这一次工作:

java -jar my.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM