当前位置:   article > 正文

spring-boot-admin源码分析及单机监控spring-boot-monitor的实现(一)_springbootadmin monitor

springbootadmin monitor

SpringBootMonitor

 

spring-boot-admin源码分析及单机监控spring-boot-monitor的实现(一)

spring-boot-admin源码分析及单机监控spring-boot-monitor的实现(二)

spring-boot-admin源码分析及单机监控spring-boot-monitor的实现(三)

 

1.spring-boot-admin简介

 

spring-boot-admin为springboot提供一套可视化监控页面,spring-boot-admin可以方便监控集群各节点的使用及访问情况。单机使用spring-boot-admin,需要同时引入spring-boot-admin-server和spring-boot-admin-client。

 

2.spring-boot-monitor

 

了解了spring-boot-admin之后,我们可以仿照spring-boot-admin写一个简单的单机监控工具,不需要既用server又用client。
 

3.程序入口

 

spring-boot-admin通过注解@EnableAdminServer启用spring-boot-admin的相关功能,@EnableAdminServer是程序唯一入口,它的源码是这样的:

  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Import(AdminServerImportSelector.class)
  5. public @interface EnableAdminServer {
  6. }

 

重点是@Import(AdminServerImportSelector.class),使用@Import注解可以引入三种类

   a.使用了@Configuration注解的类

       这个比较简单,如果明确知道需要引入哪个配置类,直接引入就可以。

   b.ImportSelector的子类

       如果并不确定引入哪个配置类,需要根据@Import注解所标识的类或者另一个注解(通常是注解)里的定义信息选择配置类的话,用这种方式。 

   c.注解@EnableTransactionManagement

 

参考:http://weiqingfei.iteye.com/blog/2361152

 

4. ImportSelector

 

AdminServerImportSelector实现了DeferredImportSelector,DeferredImportSelector继承ImportSelector,SpringBoot里的ImportSelector是通过SpringBoot提供的

@EnableAutoConfiguration这个注解里完成的。这个@EnableAutoConfiguration注解可以显式地调用,否则它会在

@SpringBootApplication注解中隐式地被调用。AdminServerImportSelector实现了selectImports方法,引入了NotifierConfiguration、

HazelcastStoreConfiguration、AdminServerCoreConfiguration、AdminServerWebConfiguration、DiscoveryClientConfiguration、

RevereseZuulProxyConfiguration。这些类都有@Configuration注解。

而监控页面的配置,主要是AdminServerCoreConfiguration和AdminServerWebConfiguration这两个类完成配置的。

 

至此,我们可以仿照实现自己的注解:

 

注解:

  1. package com.cff.boot.monitor.config;
  2. import java.lang.annotation.Documented;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. import java.lang.annotation.ElementType;
  7. import org.springframework.context.annotation.Import;
  8. @Target(ElementType.TYPE)
  9. @Retention(RetentionPolicy.RUNTIME)
  10. @Documented
  11. @Import(MonitorConfigImportSelector.class)
  12. public @interface EnableMonitorServer {
  13. }
}

ImportSelector:

  1. package com.cff.boot.monitor.config;
  2. import org.springframework.context.annotation.DeferredImportSelector;
  3. import org.springframework.core.type.AnnotationMetadata;
  4. public class MonitorConfigImportSelector implements DeferredImportSelector {
  5. @Override
  6. public String[] selectImports(AnnotationMetadata importingClassMetadata) {
  7. return new String[] { MonitorConfiguration.class.getCanonicalName(),
  8. MonitorWebConfiguration.class.getCanonicalName()};
  9. }
  10. }

 

项目git地址:

https://gitee.com/ffch/SpringBootMonitor

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/125579
推荐阅读
相关标签
  

闽ICP备14008679号