spring boot 执行器端点映射根类

Posted

技术标签:

【中文标题】spring boot 执行器端点映射根类【英文标题】:spring boot actuator endpoint mapping root class 【发布时间】:2017-02-07 13:21:10 【问题描述】:

在春天我们可以设计如下的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 boot 执行器源代码。如果我们将在我们的应用程序中使用 Spring Boot 执行器,它将为我们提供一些端点,这些端点已作为其他 API 公开,例如健康、指标、信息。所以在我的应用程序中,如果我使用弹簧启动执行器,当我点击“localhost:8080/health”之类的 url 时,我会得到响应。

所以现在我的问题是在映射此 URL 的 Spring Boot 执行器源代码中。我调试了spring boot actuator的源代码,但是找不到端点映射的根类。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

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”的地方。

【讨论】:

【参考方案2】:

所有 spring-boot-actuator 端点都扩展了 AbstractEndpoint(在 Health 端点情况下,例如:class HealthEndpoint extends AbstractEndpoint<Health>),其 contrucor 具有 Endpoint 的 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();

最后,这个端点在EndpointAutoConfiguration 类中配置为Bean

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

看看这篇解释如何自定义端点的帖子:

http://blog.codeleak.pl/2014/10/spring-boot-actuator-custom-endpoint.html

【讨论】:

以上是关于spring boot 执行器端点映射根类的主要内容,如果未能解决你的问题,请参考以下文章

Spring-boot 执行器端点 - 406 不可接受

将 spring boot 执行器健康端点更改为自定义端点

Spring boot actuator:当其他执行器的端点受到保护时,健康端点未显示详细信息

Spring Boot之执行器端点(Actuator Endpoint)实现剖析

如何在 /info 执行器端点中获取 Spring Boot 的版本

Spring Boot:为执行器端点禁用 https