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: