Spring Boot 2.0 未注册自定义执行器端点 Bean

Inn*_*nty 3 java spring-boot spring-boot-actuator actuator

我正在尝试在 Spring Boot 2.0.2.RELEASE 应用程序中添加自定义执行器端点。我正在遵循官方指南、官方迁移指南和这篇文章。

我能够通过属性配置所有内容:隐藏/公开端点、更改基本路径等。一切正常,除了我的自定义端点 bean 没有被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)
Run Code Online (Sandbox Code Playgroud)

这三行是我得到的全部。我可以访问/actuator/health并/actuator/info没有任何问题,但不是我的自定义端点。我显然得到 404。

到目前为止我尝试过的:

  • 检查我的端点类是否在上下文中注册为 bean。
  • 通过 yaml 配置显式公开它。
  • 通过暴露一切 management.endpoints.web.exposure.include=*
  • 完全删除了所有的管理配置,因为它应该是默认可用的。
  • 三重检查端点 ID。
  • 重命名端点 ID。

我至少可以研究什么的任何想法?到目前为止,我发现的所有问题最终都没有意识到他们也需要@Component注释。

啊,顺便说一下,这是我的课:

@Component
@Endpoint(id = "hello")
public class HelloEndpoint {

    @ReadOperation
    public String sayHello() {
        return "Hello!";
    }
}
Run Code Online (Sandbox Code Playgroud)

Inn*_*nty 7

发布问题后,我几乎立即找到了答案。这是配置中的拼写错误以及默认情况下实际上并未公开的事实的组合。尽管官方帖子说:

要配置端点,真正需要的只是将其公开为@Bean

这些是定义属性的正确方法:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include='health,info,metrics,hello'
Run Code Online (Sandbox Code Playgroud)

或者作为 YAML:

management:
  endpoints:
    web:
      exposure:
        include: 'health,info,metrics,hello'
Run Code Online (Sandbox Code Playgroud)

这是官方参考:https : //docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html#production-ready-endpoints-exposing-endpoints

有趣的是,您不能再在端点名称中使用下划线。至少没有额外的变化。