使用spring boot重新打包启用JMX

时间:2017-01-16 17:50:17

标签: java linux spring spring-boot

我想为我的春季启动应用程序启用JMX并尝试了一切但没有成功。我认为问题在于,我使用repackage的{​​{1}}选项。

目前我做了以下事情:

spring-boot-maven-plugin

但是当我启动应用程序时,它不会侦听端口1617.我无法从JMX客户端连接,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 也没有列出端口。

我也通过直接传递ss -tulpen参数来尝试它。我也尝试了-D...,并认为Spring引导可以这样处理它们。我还在多台机器上尝试了很多其他的东西,没有成功。

进一步的信息:

  • 我的应用程序使用任何--com.sun...父级。
  • 我在ArchLinux系统上尝试这个。
  • 我没有任何特殊的iptables配置,所有端口都应该在配置的ip上可用。
  • Spring boot版本:1.4.1.RELEASE
  • Java版本:spring-boot

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

更新:我添加了一些行来阅读和打印传递的openjdk version "1.8.0_112"(如here所述)。当我通过IntelliJ启动应用程序并将VM选项设置为上面的JAVA_OPTS值时,它可以正常工作。打印传递的选项,VM正在侦听端口1617.当我使用JAVA_OPTS启动应用程序时,不会打印参数,并且VM仍然没有侦听端口1617.

1 个答案:

答案 0 :(得分:3)

问题解决了!我仍然不知道为什么它不能与JAVA_OPTS一起使用但我知道在直接传递选项时我做错了什么:似乎我总是在之前传递-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