Also, was ich getan habe:
Wie Als Proof of Concept habe ich eine kleine Plain-Jar-App erstellt, die nur die aktuelle Zeit in einer Schleife ausgibt. Ich habe die entsprechenden Ports auf dem Server geöffnet, mit Netstat überprüft, ob die App diese Ports überwacht, und von meinem Laptop aus überprüft, ob die Ports auf dem Server verfügbar sind. Dann führe ich meine einfache JAR-App aus mit:
Code: Select all
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
Dann habe ich versucht, eine einfache, nichts zu tunde Spring Boot-App zu erstellen und mit denselben Parametern eine Verbindung zu ihr herzustellen (auch überprüft, ob die Spring Boot-App lauscht). an diesen Ports und sie sind offen), aber ich konnte keine Verbindung herstellen.
Dann habe ich versucht, meine Spring Boot-Apps ohne JVM-Parameter auszuführen, habe aber diese Klasse erstellt:
Code: Select all
@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;
}
}
Warum ist das so? Was übersehe ich hier?