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,其中解释了如何自定义您的端点:
在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,其中解释了如何自定义您的端点: