简述
Actuator相关代码在spring-boot-actuator-[version].jar下面.
- DefaultListableBeanFactory.getBeanNamesForAnnotation() : 按照Annotation类名来获取Bean实例名;
- EndpointDiscoverer.createEndpointBeans() : 按照获取到的Bean实例名创建EndpointBean
- AbstractWebMvcEndpointHandlerMapping.initHandlerMethods() : 根据刚才查找到的enpoints列表进行注册.
- AbstractWebMvcEndpointHandlerMapping:createRequestMappingInfo():创建url信息(类似于@RequestMapping)
- OnEnabledEndpointCondition.getMatchOutcome() : 获取配置文件中management.endpoint.[id].enabled的值,[id]为变量值,类似management.endpoint.shutdown.enabled.
端点及处理方法在应用启动时初始化
注册端点处理方法处理流程是:
- org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:getEndpoints()
- org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:discoverEndpoints()
- org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:convertToEndpoints(Collection
endpointBeans) - org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:convertToEndpoint(EndpointBean endpointBean)
- org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer:addOperations(MultiValueMap
indexed, EndpointId id,
Object target, boolean replaceLast) - org.springframework.boot.actuate.endpoint.annotation.DiscoveredOperationsFactory:createOperations(EndpointId id, Object target)
- 待续.
获取端点处理方法在:
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服务的前缀.