Spring Boot @ManagedResource 组件在 Docker 中启动时在 VisualVM 中不可见,但在本地工作
Spring Boot @ManagedResource component is not visible in VisualVM when launched in Docker but works locally
问题很容易重现。我有一个 Spring 组件:
@Component
@ManagedResource
public class EncryptionUtil {
...
@ManagedOperation
public String encrypt(String plain) {
...
}
@ManagedOperation
public String decrypt(String encrypted) {
...
}
}
当我在本地启动应用程序(使用 IDE)并使用 VisualVM 通过 JMX 连接时,我可以查看和管理 bean:
但是,当我在容器中(也在本地)启动应用程序时,我没有看到 bean。此外,我也没有看到任何 Spring 相关的管理设施:
这是我的 JMX 选择,我在启动 JAR 文件时将其传递到 Dockerfile 入口点:
JMX_OPTS="-Dcom.sun.management.jmxremote=true\
-Dcom.sun.management.jmxremote.local.only=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.ssl=false\
-Djava.rmi.server.hostname=$DOCKER_HOST_IP\
-Dserver.port=$PORT\
-Dcom.sun.management.jmxremote.port=9090\
-Dcom.sun.management.jmxremote.rmi.port=9090"
DOCKER_HOST_IP=127.0.0.1
在本地启动时很明显。
问题是,容器中根本无法识别 MBean。
伙计们有什么想法吗?
谢谢
发现解决方案非常简单:将以下内容添加到您的 JMX_OPT 属性:
-Dspring.jmx.enabled=true
详情here
问题很容易重现。我有一个 Spring 组件:
@Component
@ManagedResource
public class EncryptionUtil {
...
@ManagedOperation
public String encrypt(String plain) {
...
}
@ManagedOperation
public String decrypt(String encrypted) {
...
}
}
当我在本地启动应用程序(使用 IDE)并使用 VisualVM 通过 JMX 连接时,我可以查看和管理 bean:
但是,当我在容器中(也在本地)启动应用程序时,我没有看到 bean。此外,我也没有看到任何 Spring 相关的管理设施:
这是我的 JMX 选择,我在启动 JAR 文件时将其传递到 Dockerfile 入口点:
JMX_OPTS="-Dcom.sun.management.jmxremote=true\
-Dcom.sun.management.jmxremote.local.only=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.ssl=false\
-Djava.rmi.server.hostname=$DOCKER_HOST_IP\
-Dserver.port=$PORT\
-Dcom.sun.management.jmxremote.port=9090\
-Dcom.sun.management.jmxremote.rmi.port=9090"
DOCKER_HOST_IP=127.0.0.1
在本地启动时很明显。
问题是,容器中根本无法识别 MBean。
伙计们有什么想法吗? 谢谢
发现解决方案非常简单:将以下内容添加到您的 JMX_OPT 属性:
-Dspring.jmx.enabled=true
详情here