127. Spring Boot EndPoint实现原理【从零开始学Spring Boot】

Spring BootEndpoint主要是用来监控应用服务的运行状况,并集成在MVC中提供查看接口。内置的Endpoint比如HealthEndpoint会监控distdb的状况

       Endpoint是在包org.springframework.boot.actuate.endpoint下,其中invoke()是最主要的方法,用于返回监控的内容,isSensitive()用于权限控制。核心代码如下:

    public interface Endpoint<T> {
        String getId();
        boolean isEnabled();
        boolean isSensitive();
        T invoke();
    }
 

       Endpoint的加载还是要依靠spring.factories实现的。Spring-boot-actutor包下的META-IN/spring.factories配置了EndpointAutoConfiguration,以下是截取默认配置的一部分配置信息:

 

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration,\

 

 

     EndpointAutoConfigurationorg.springframework.boot.actuate.autoconfigure包下)就会注入必要的Endoint。有些Endpoint需要外部的收集类,比如TraceEndpoint,如下代码:

    @Bean
    @ConditionalOnMissingBean
    public TraceEndpoint traceEndpoint() {
        return new TraceEndpoint(this.traceRepository);
    }
 

TraceEndpoint会记录每次请求的RequestResponse的状态,需要嵌入到Request的流程中,这里就主要用到了3个类。

1TraceRepository用于保存和获取RequestResponse的状态。

public interface TraceRepository{
     List<Trace> findAll();
     void add(Map<String, Object> traceInfo);
 }
 

2WebRequestTraceFilter用于嵌入web request,收集请求的状态并保存在TraceRepository中。

3TraceEndpointinvoke()方法直接调用TraceRepository保存的数据。

public class TraceEndpoint extends AbstractEndpoint<List<Trace>> {
     private final TraceRepository repository;
     public TraceEndpoint(TraceRepository repository) {
         super("trace");
         Assert.notNull(repository, "Repository must not be null");
         this.repository = repository;
     }
     public List<Trace> invoke() {
         return this.repository.findAll();
     }
 }
 

       讲了这么多,关键是我们如何自定义Endpoint呢?期待下篇博客。

视频&交流平台

à SpringBoot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 

猜你喜欢

转载自412887952-qq-com.iteye.com/blog/2378932