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!";
    }
}

person Innokenty    schedule 15.06.2018    source источник
comment
Проверка работоспособности: сканирование компонентов включено?   -  person Compass    schedule 15.06.2018
comment
Да, проверил. Смотрите ответ от меня ниже. Я на самом деле просто тупой.   -  person Innokenty    schedule 15.06.2018


Ответы (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#production-ready-endpoints-exposing-endpoints

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

person Innokenty    schedule 15.06.2018