---
title: 'JMX in Spring Boot nutzen'
url: 'https://tutego.de/blog/javainsel/2018/04/jmx-in-spring-boot-nutzen'
markdown: 'https://tutego.de/blog/javainsel/2018/04/jmx-in-spring-boot-nutzen.md'
date: '2018-04-06'
description: '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 las…'
taxonomy:
  category:
    - Spring
---

# JMX in Spring Boot nutzen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## JMX in Spring Boot nutzen

06.04.2018 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

### 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

```java
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 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`

```java
@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`.

Siehe auch .

Kategorien: [Spring](https://tutego.de/blog/javainsel/category/spring/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Next: [Caching in Spring Boot nutzen](https://tutego.de/blog/javainsel/2018/04/caching-in-spring-boot-nutzen.md)
