java - 使用 spring boot 重新打包启用 JMX

标签 java linux spring spring-boot

我想为我的 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 parent。
  • 我正在 ArchLinux 系统上尝试这个。
  • 我没有任何特殊的 iptables 配置,所有端口都应该在配置的 ip 上可用。
  • Spring Boot 版本:1.4.1.RELEASE
  • Java 版本:openjdk 版本“1.8.0_112”

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

更新:我添加了一些行来读取和打印传递的 JAVA_OPTS(如 here 所述)。当我通过 IntelliJ 启动应用程序并将 VM 选项设置为上面的 JAVA_OPTS 值时,它起作用了。传递的选项被打印出来,VM 正在监听端口 1617。当我使用 java -jar my.jar -Dcom.sun.... 启动应用程序时,参数没有被打印出来,VM 是仍然没有在端口 1617 上监听。

最佳答案

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

The order of these options is essential!

What? Really?

Yes!

那么,现在适合我的方式:

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

关于java - 使用 spring boot 重新打包启用 JMX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41682218/

相关文章:

java - 扩展 BufferedImage 类

java - 如何使用jnlp webstart而不缓存jar

java - 如果 Spring 可以成功拦截 @Configuration 类中的类内函数调用,为什么它在常规 bean 中不支持呢?

linux - 应用程序试图创建一个窗口,但无法加载驱动程序

java - Autowiring bean 不工作上下文 :component scan

spring - 将 Spring bean 注入(inject) JSF ManagedBean 时出错

java - 在 Struts2 webapp 中更改 DateFormat 或默认语言环境

java - java编译器如何找到没有头文件的类?

java - 无法连接到 MySQL 服务器 - Java

android - 在 Android selinux 中转义冒号字符