这背后的动机是使用 JMX 管理本地 java 服务,而不需要像 java 服务包装器这样更重量级的东西。
每个服务都以 -Dcom.sun.management.jmxremote
启动,这意味着“JVM 配置为作为本地(同一机器)JMX 服务器工作。” (有关详细解释,请参阅 here)。
我尝试了 Attach API , 但决定反对它,因为它没有与 Java SE6 捆绑在一起,并且不可能将它与 Maven 集成。
最佳答案
我发布这个问题是为了分享解决方案,因为我没有在这里看到它(问答)。
这里的关键是使用ConnectorAddressLink.importFrom(pid)
来获取地址。
public static MBeanServerConnection getLocalMBeanServerConnectionStatic(int pid) {
try {
String address = ConnectorAddressLink.importFrom(pid);
JMXServiceURL jmxUrl = new JMXServiceURL(address);
return JMXConnectorFactory.connect(jmxUrl).getMBeanServerConnection();
} catch (IOException e) {
throw new RuntimeException("Of course you still have to implement a good connection handling");
}
}
关于java - 如何通过知道进程 ID 连接到本地 JMX 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252914/