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

Интересно, что вы не можете больше использовать подчеркивания в именах конечных точек. По крайней мере, без дополнительных изменений.

Другие вопросы по тегам