Spring Boot 2.0 не регистрирует пользовательский компонент конечной точки привода
Я пытаюсь добавить пользовательскую конечную точку привода в приложении Spring Boot 2.0.2.RELEASE. Я следую официальным инструкциям, официальному руководству по миграции, а также этому посту.
Я могу настроить все через свойства: скрыть / открыть конечные точки, изменить базовый путь и т. Д. Все работает, за исключением того, что мой пользовательский компонент конечной точки не обнаружен WebMvcEndpointHandlerMapping
, Это просто не появляется в этих известных строках регистрации:
EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
WebMvcEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map<java.lang.String, java.util.Map<java.lang.String, org.springframework.boot.actuate.endpoint.web.Link>> org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.links(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
Эти три строки - все, что я получаю. Я могу получить доступ /actuator/health
а также /actuator/info
без каких-либо проблем, но не моя пользовательская конечная точка. Я получаю 404, очевидно.
Что я пробовал до сих пор:
- Проверено, что мой класс конечной точки зарегистрирован в контексте как бин.
- Выставил это явно через конфигурацию yaml.
- Выставил все через
management.endpoints.web.exposure.include=*
- Полностью удалена вся конфигурация управления, потому что она должна быть фактически доступна по умолчанию.
- Тройной проверил идентификатор конечной точки.
- Переименован в идентификатор конечной точки.
Любые идеи о том, что я могу хотя бы посмотреть? Все вопросы, которые я нашел до сих пор, заканчиваются лично, не понимая, что они нуждаются @Component
аннотации тоже.
Ах, вот мой класс, кстати:
@Component
@Endpoint(id = "hello")
public class HelloEndpoint {
@ReadOperation
public String sayHello() {
return "Hello!";
}
}
1 ответ
После размещения вопроса я нашел ответ практически сразу. Это была комбинация опечаток в конфиге и того факта, что по умолчанию она не выставлена. Несмотря на официальное сообщение, гласящее:
Чтобы настроить конечную точку, все, что требуется на самом деле, это выставить ее как @Bean.
Вот правильные способы определения свойства:
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include='health,info,metrics,hello'
Или как YAML:
management:
endpoints:
web:
exposure:
include: 'health,info,metrics,hello'
Вот официальная ссылка: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
Интересно, что вы не можете больше использовать подчеркивания в именах конечных точек. По крайней мере, без дополнительных изменений.