spring boot 源码解析48-MetricsEndpoint

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

前言

本文我们来解析MetricsEndpoint(之前没有讲述的)

解析

MetricsEndpoint继承自AbstractEndpoint.

  1. 字段,构造器如下:

        // 获得PublicMetrics中所有类型的PublicMetrics,由构造器注入
        private final List publicMetrics;
    
        public MetricsEndpoint(PublicMetrics publicMetrics) {
            this(Collections.singleton(publicMetrics));
        }
    
        public MetricsEndpoint(Collection publicMetrics) {
            super("metrics");
            Assert.notNull(publicMetrics, "PublicMetrics must not be null");
            this.publicMetrics = new ArrayList(publicMetrics);
            AnnotationAwareOrderComparator.sort(this.publicMetrics);
        }

    PublicMetrics相关的内容可以查阅之前的文章,如下:

    1. spring boot 源码解析35-CacheStatisticsProvider,CacheStatistics,CachePublicMetrics
    2. spring boot 源码解析32-PublicMetrics详解
    3. spring boot 源码解析47-Metric(RichGauge)ReaderPublicMetrics
  2. 其声明了3个方法,如下:

    1. registerPublicMetrics–> 向MetricsEndpoint进行注册.代码如下:

          public void registerPublicMetrics(PublicMetrics metrics) {
              this.publicMetrics.add(metrics);
              AnnotationAwareOrderComparator.sort(this.publicMetrics);
          }
    2. unregisterPublicMetrics–>从MetricsEndpoint注销.代码如下:

          public void unregisterPublicMetrics(PublicMetrics metrics) {
              this.publicMetrics.remove(metrics);
          }
    3. invoke,实现如下:

          public Map invoke() {
              Map result = new LinkedHashMap();
              // 1. 遍历publicMetrics依次进行处理,
              List metrics = new ArrayList(this.publicMetrics);
              for (PublicMetrics publicMetric : metrics) {
                  try {
                      // 2. 依次添加PublicMetrics对应的Metric到result中
                      for (Metric metric : publicMetric.metrics()) {
                          result.put(metric.getName(), metric.getValue());
                      }
                  }
                  catch (Exception ex) {
                      // Could not evaluate metrics
                  }
              }
              return result;
          }
      1. 遍历publicMetrics依次进行处理
      2. 依次添加PublicMetrics对应的Metric到result中
  3. 属性配置:

    由于该类声明了@ConfigurationProperties(prefix = “endpoints.metrics”)注解,因此可以通过如下属性配置:

        endpoints.metrics.enabled= # Enable the endpoint.
        endpoints.metrics.id= # Endpoint identifier.
        endpoints.metrics.sensitive= # Mark if the endpoint exposes sensitive information.
  4. 自动装配:

    声明在EndpointAutoConfiguration中,代码如下:

        @Bean
        @ConditionalOnMissingBean
        public MetricsEndpoint metricsEndpoint() {
            List publicMetrics = new ArrayList();
            if (this.publicMetrics != null) {
                publicMetrics.addAll(this.publicMetrics);
            }
            Collections.sort(publicMetrics, AnnotationAwareOrderComparator.INSTANCE);
            return new MetricsEndpoint(publicMetrics);
        }

    当BeanFactory中不存在MetricsEndpoint类型的bean时生效.

    默认情况下,会持有如下几个PublicMetrics:

    1. MetricReaderPublicMetrics–> 在PublicMetricsAutoConfiguration中进行的声明
    2. SystemPublicMetrics–> 默认装配
    3. TomcatPublicMetrics–> 加入spring-boot-starter-web之后自动装配
    4. DataSourcePublicMetrics–> 加入jdbc,orm相关的依赖后自动装配
    5. CachePublicMetrics–> 加入spring-boot-starter-cache之后自动装配
    6. MetricReaderPublicMetrics–>加入了liquibase-core的依赖后,MetricsDropwizardAutoConfiguration中自动装配
    7. MetricReaderPublicMetrics–>加入了spring-boot-starter-integration之后,IntegrationMetricsConfiguration中进行自动装配
    8. ….

来源:[]()

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » spring boot 源码解析48-MetricsEndpoint

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏