Die Java Management Extensions (JMX)
- Die Java Management Extensions (JMX) ist eine Spezifikation zur Verwaltung und Überwachung von Java-Anwendungen.
- Teile der JMX Spezifikation sind ab Java 5 in der Java SE integriert.
- Es gibt einen JMX Agent, an dem Managed Beans angemeldet werden.
- Von außen lassen sich diese Managed Beans erfragen.
- JConsole ist ein GUI-Programm im JDK, das zur Verwaltung von MBeans verwendet werden kann.
JMX in Spring Boot
Spring nutzt drei Annotationen, um Managed Beans mit ihren Zuständen und Operationen beim JMX Agent zu registrieren:
@ManagedResource
- Definiert mit der Typ-Annotation die Managed Bean
@ManagedAttribute
- Definiert ein Attribut (Setter/Getter)
@ManagedOperation
- Definiert eine Operation
Beispiel-Managed-Bean
package com.tutego.boot.actuator;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.stereotype.Component;
@Component
@ManagedResource
public class StringMapManagedBean {
private final Map<String, String> map = new HashMap<>();
@ManagedAttribute
public int getSize() {
return map.size();
}
@ManagedOperation
public String get( String key ) {
return map.get( key );
}
@ManagedOperation
public String put( String key, String value ) {
return map.put( key, value );
}
public void remove( String key ) {
map.remove( key );
}
}
Annotationstyp @ManagedResource
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ManagedResource {
@AliasFor("objectName")
String value() default "";
@AliasFor("value")
String objectName() default "";
String description() default "";
int currencyTimeLimit() default -1;
boolean log() default false;
String logFile() default "";
String persistPolicy() default "";
int persistPeriod() default -1;
String persistName() default "";
String persistLocation() default "";
}
Springs eigene Managed Beans
Spring Boot veröffentlicht selbst diverse Managed Beans unter der Domäne org.springframework.boot
.
org.springframework.boot:type=Endpoint,name=Health
zum Beispiel für die Gesundheitsinformationen
Sie lassen sich abschalten mit management.endpoints.jmx.exposure.exclude=*
.
Falls mehrere ApplicationContext
exisistieren kommt es zum Namenskonflikt; der lässt sich mit management.endpoints.jmx.unique-names=true
vermeiden.
Der Domain-Name lässt sich anpassen mit management.endpoints.jmx.domain
.