看了下Actuator源码和处理流程,大概总结如下:
端点及处理方法在应用启动时初始化.
Actuator相关代码在spring-boot-actuator-[version].jar下面.
DefaultListableBeanFactory.getBeanNamesForAnnotation() : 按照Annotation类名来获取Bean实例名;
EndpointDiscoverer.createEndpointBeans() : 按照获取到的Bean实例名创建EndpointBean
AbstractWebMvcEndpointHandlerMapping.initHandlerMethods() : 根据刚才查找到的enpoints列表进行注册.
OnEnabledEndpointCondition.getMatchOutcome() : 获取配置文件中management.endpoint.[id].enabled的值,[id]为变量值,类似management.endpoint.shutdown.enabled.
在端点处理类(比如:org.springframework.boot.actuate.health.HealthEndpoint)的方法上添加@ReadOperation(GET)、@WriteOperation(POST)、@DeleteOperation(DELETE)可以暴露该方法到路由中,同时可以在方法参数上添加@Selector指定子端点(例如:org.springframework.boot.actuate.health.HealthEndpoint:healthForComponent(@Selector String component)方法)
Shutdown端点:
处理类: org.springframework.boot.actuate.context.ShutdownEndpoint
处理方法: shutdown()
1. 首先检查应用上下文是否为空,为空则返回无可关闭应用,不为空则继续执行;
2. 返回关闭消息,并且新开一个线程,调用实际的关闭应用方法(this.context.close()),并设置500毫秒之后关闭应用.
展开