spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一)
阿新 • • 發佈:2018-11-27
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是程式唯一入口,它的原始碼是這樣的:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(AdminServerImportSelector.class) public @interface EnableAdminServer { }
重點是@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這兩個類完成配置的。
至此,我們可以仿照實現自己的註解:
註解:
package com.cff.boot.monitor.config;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import org.springframework.context.annotation.Import;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(MonitorConfigImportSelector.class)
public @interface EnableMonitorServer {
}
ImportSelector:package com.cff.boot.monitor.config;
import org.springframework.context.annotation.DeferredImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MonitorConfigImportSelector implements DeferredImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[] { MonitorConfiguration.class.getCanonicalName(),
MonitorWebConfiguration.class.getCanonicalName()};
}
}
專案git地址: https://gitee.com/xiaoyaofeiyang/SpringBootMonitor