3

我正在尝试在 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)

这三行是我得到的全部。我可以毫无问题地访问,但不能访问我的自定义端点/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!";
    }
}
4

1 回答 1

8

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

要配置端点,真正需要的只是将其公开为 @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

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

于 2018-06-15T15:06:24.647 回答