Итак, что я сделал:
Как В качестве доказательства концепции я создал небольшое приложение в виде простой банки, которое в цикле печатает только текущее время. Я открыл соответствующие порты на сервере, проверил с помощью netstat, что приложение прослушивает эти порты, и на своем ноутбуке проверил, что порты доступны на сервере. Затем я запускаю свое простое приложение jar, используя:
Код: Выделить всё
java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname= -jar app.jar
Затем я попытался создать простое ничего не делающее приложение Spring Boot и подключиться к нему, используя те же параметры (также проверено, что приложение Spring Boot прослушивает на этих портах, и они открыты), но я не смог подключиться.
Затем я попробовал запустить свои приложения Spring Boot без параметров JVM, но создал этот класс:
Код: Выделить всё
@Configuration
public class JMXConfig {
@Value("${jmx.hostname:}")
private String hostname;
@Value("${jmx.remote.port:12345}")
private int jmxRemotePort;
@Value("${jmx.rmi.port:12345}")
private int rmiPort;
@Bean
public JMXConnectorServer jmxConnectorServer() throws Exception {
LocateRegistry.createRegistry(rmiPort);
String serviceUrl = String.format("service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi", hostname, rmiPort);
HashMap env = new HashMap();
env.put("com.sun.management.jmxremote.authenticate", false);
env.put("com.sun.management.jmxremote.ssl", false);
env.put("java.rmi.server.hostname", hostname);
env.put("com.sun.management.jmxremote.local.only", false);
env.put("com.sun.management.jmxremote.rmi.port", String.valueOf(jmxRemotePort));
env.put("com.sun.management.jmxremote.port", String.valueOf(rmiPort));
JMXServiceURL jmxServiceUrl = new JMXServiceURL(serviceUrl);
JMXConnectorServer jmxServer = JMXConnectorServerFactory.newJMXConnectorServer(
jmxServiceUrl,
env,
ManagementFactory.getPlatformMBeanServer()
);
jmxServer.start();
System.out.printf("JMX Server started at: %s%n", serviceUrl);
return jmxServer;
}
}
Почему? Что мне здесь не хватает?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-jmx
Мобильная версия