Java: Spring Boot Actuator源码分析

简述

Actuator相关代码在spring-boot-actuator-[version].jar下面.

  1. DefaultListableBeanFactory.getBeanNamesForAnnotation() : 按照Annotation类名来获取Bean实例名;
  2. EndpointDiscoverer.createEndpointBeans() : 按照获取到的Bean实例名创建EndpointBean
  3. AbstractWebMvcEndpointHandlerMapping.initHandlerMethods() : 根据刚才查找到的enpoints列表进行注册.
  4. AbstractWebMvcEndpointHandlerMapping:createRequestMappingInfo():创建url信息(类似于@RequestMapping)
  5. OnEnabledEndpointCondition.getMatchOutcome() : 获取配置文件中management.endpoint.[id].enabled的值,[id]为变量值,类似management.endpoint.shutdown.enabled.

java标志
image-2746

端点及处理方法在应用启动时初始化

注册端点处理方法处理流程是:

  1. org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:getEndpoints()
  2. org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:discoverEndpoints()
  3. org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:convertToEndpoints(Collection endpointBeans)
  4. org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:convertToEndpoint(EndpointBean endpointBean)
  5. org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:addOperations(MultiValueMap indexed, EndpointId id,
    Object target, boolean replaceLast)
  6. org.springframework.boot.actuate.endpoint.annotation.DiscoveredOperationsFactory:createOperations(EndpointId id, Object target)
  7. 待续.

获取端点处理方法在:

org.springframework.core.MethodIntrospector:selectMethods();

在端点处理类(比如:org.springframework.boot.actuate.health.HealthEndpoint)的方法上添加@ReadOperation(GET)、@WriteOperation(POST)、@DeleteOperation(DELETE)可以暴露该方法到路由中,同时可以在方法参数上添加@Selector指定子端点(例如:org.springframework.boot.actuate.health.HealthEndpoint:healthForComponent(@Selector String component)方法)


WebEndpointProperties: 获取配置文件中actuator服务的前缀.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据