这个问题很容易重现。我有一个 Spring 组件:
@Component
@ManagedResource
public class EncryptionUtil {
...
@ManagedOperation
public String encrypt(String plain) {
...
}
@ManagedOperation
public String decrypt(String encrypted) {
...
}
}
当我在本地启动应用程序(使用 IDE)并使用 VisualVM 通过 JMX 连接时我可以查看并管理 bean:
但是,当我在容器中(也在本地)启动应用程序时,我看不到该 bean。此外,我也没有看到任何与 Spring 相关的管理设施:
这是我在启动 JAR 文件时传递到 Dockerfile 入口点的 JMX 选择:
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 在容器中根本无法被识别。
大家有什么想法吗? 谢谢
最佳答案
关于java - Spring Boot @ManagedResource 组件在 Docker 中启动时在 VisualVM 中不可见,但可以在本地运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61958642/