spring 引导执行器端点映射根 class

spring boot actuator endpoint mapping root class

在spring中我们可以像下面这样设计rest web服务。

@RestController
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printWelcome(ModelMap model) {
        model.addAttribute("message", "Hello");
        return "hello";
    }
}

当我们这样做时,@RestController 和@RequestMapping 将在内部管理请求映射部分。因此,当我点击 url 即 http://localhost:8080/hello 时,它将指向 printWelcome 方法。

我正在研究 spring 引导执行器源代码。如果我们将在我们的应用程序中使用 spring 启动执行器,它将为我们提供一些端点,这些端点已经暴露为 rest API,如健康、指标、信息。因此,在我的应用程序中,如果我使用 spring 引导执行器,当我将像 "localhost:8080/health" 那样点击 url 时,我会得到响应。

所以现在我的问题是 spring 引导执行器源代码中映射了这些 URL。我调试了 spring 引导执行器的源代码,但无法找到端点映射的根 class。

有人可以帮忙吗?

here 是,在 AbstractEndpoint 中它说

/**
     * Endpoint identifier. With HTTP monitoring the identifier of the endpoint is mapped
     * to a URL (e.g. 'foo' is mapped to '/foo').
     */

如果您看到 HealthEndPoint 它会扩展 AbstractEndpoint 并执行 super("health", false); ,这就是它映射到 "localhost:8080/health".

的地方

所有 spring-boot-actuator 端点都扩展了 AbstractEndpoint(例如在 Health 端点情况下:class HealthEndpoint extends AbstractEndpoint<Health>),其构造函数具有端点的 ID。

 /**
 * Endpoint identifier. With HTTP monitoring the identifier of the endpoint is mapped
 * to a URL (e.g. 'foo' is mapped to '/foo').
 */
private String id;

否则,它有一个调用方法(来自接口端点),通过它调用端点。

/**
 * Called to invoke the endpoint.
 * @return the results of the invocation
 */
T invoke();

最后,此端点在 class EndpointAutoConfiguration 中配置为 Bean:

@Bean
@ConditionalOnMissingBean
public HealthEndpoint healthEndpoint() {
    return new HealthEndpoint(this.healthAggregator, this.healthIndicators);
}

看看这个 post,其中解释了如何自定义您的端点: