Reviewing the Beans from a Spring Boot application using the starters:

  • Spring Boot Starter Web
  • Spring Boot Starter Actuator

I detected that exist 3 beans created in the Spring Boot Container that they doesn´t have any name:

BeanDocument[beanName=, beanPackage=io.micrometer.core.instrument, dependencies=[MetricsAutoConfiguration]]
BeanDocument[beanName=, beanPackage=io.micrometer.core.instrument.config, dependencies=[HttpClientObservationsAutoConfiguration$MeterFilterConfiguration, ObservationProperties, MetricsProperties]]
BeanDocument[beanName=, beanPackage=io.micrometer.core.instrument.config, dependencies=[WebMvcObservationAutoConfiguration$MeterFilterConfiguration, MetricsProperties, ObservationProperties]]

You can reproduce the case here: https://github.com/jabrena/spring-boot-user-beans/blob/main/spring-boot-starter-user-beans/src/test/java/io/github/jabrena/userbeans/UnnamedMicrometerBeanTests.java

This is the unique case that I identified, maybee that Beans require a name.

Juan Antonio

Comment From: wilkinsona

To determine the bean's "name" you're not using the keys in the map that's returned from the beans endpoint. Instead, you're using bean.getValue().getType().getSimpleName(). Judging by their dependencies, the three beans that your code does not handle are the following:

"metricsHttpClientUriTagFilter": {
    "aliases": [],
    "dependencies": [
        "org.springframework.boot.actuate.autoconfigure.observation.web.client.HttpClientObservationsAutoConfiguration$MeterFilterConfiguration",
        "management.observations-org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties",
        "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties"
    ],
    "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/observation/web/client/HttpClientObservationsAutoConfiguration$MeterFilterConfiguration.class]",
    "scope": "singleton",
    "type": "io.micrometer.core.instrument.config.MeterFilter$9"
},
"metricsHttpServerUriTagFilter": {
    "aliases": [],
    "dependencies": [
        "org.springframework.boot.actuate.autoconfigure.observation.web.servlet.WebMvcObservationAutoConfiguration$MeterFilterConfiguration",
        "management.observations-org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties",
        "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties"
    ],
    "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/observation/web/servlet/WebMvcObservationAutoConfiguration$MeterFilterConfiguration.class]",
    "scope": "singleton",
    "type": "io.micrometer.core.instrument.config.MeterFilter$9"
},
"micrometerClock": {
    "aliases": [],
    "dependencies": [
        "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration"
    ],
    "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.class]",
    "scope": "singleton",
    "type": "io.micrometer.core.instrument.Clock$1"
},

Each is an anonymous inner-class so there is no simple name. You need to change your code to handle this case.

Comment From: jabrena

Many thanks @wilkinsona,

I will update the code with your notes.

Many thanks

Cheers

Juan Antonio

Comment From: jabrena

Fixed:

SpringBoot Unnamed Beans from Micrometer Core