When configuring management.metrics.distribution.slo in a native application, the ServiceLevelObjectiveBoundary#valueOf(String) factory method is not registered for reflection, resulting in a runtime error:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'management.metrics.distribution.slo[http.server.requests]' to org.springframework.boot.actuate.autoconfigure.metrics.ServiceLevelObjectiveBoundary[]:
Property: management.metrics.distribution.slo[http.server.requests]
Value: "100ms, 200ms, 500ms, 1000ms"
Origin: class path resource [application.yml] - 15:35
Reason: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [org.springframework.boot.actuate.autoconfigure.metrics.ServiceLevelObjectiveBoundary[]]
Action:
Update your application's configuration
To reproduce, create a sample application with web, actuator and graalvm support and application.yml:
management:
endpoints:
web:
exposure:
include: health,metrics
metrics:
distribution:
slo:
'[http.server.requests]': 100ms, 200ms, 500ms, 1000ms