其他相关文章:
1、Spring Boot Admin 参考指南
2、SpringBoot Admin服务离线、不显示健康信息的问题

首先根据官网的“快速开始”,快速搭建一个Spring Boot Admin Server项目
1、添加Spring Boot Admin启动器到依赖
pom.xml

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、通过添加@EnableAdminServer配置引入Spring Boot Admin Server配置

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminApplication.class, args);
    }
}

启动该Spring Boot项目,打开项目地址就能访问到Spring Boot Admin2(后面简称SBA2)的监控页面
在这里插入图片描述

🚩 这里我已经注册了两个实例到SBA2

@EnableAdminServer

当我们注释掉这个注解后,项目能启动,但是监控页面是404。下面来看下@EnableAdminServer是如何加载的。

EnableAdminServer

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AdminServerMarkerConfiguration.class)
public @interface EnableAdminServer {

}

@Import 注解用于导入指定的类到Spring 容器中

一般我们认为既然有注解表示AdminServer,那肯定有处理该注解的地方,但当你搜索SBA2的源码后,没有发现处理的地方。实际该注解只是用来导入AdminServerMarkerConfiguration类。

AdminServerMarkerConfiguration

@Configuration(proxyBeanMethods = false)
public class AdminServerMarkerConfiguration {

	@Bean
	public Marker adminServerMarker() {
		return new Marker();
	}

	public static class Marker {

	}
}

该类是一个配置类,没有任何具体逻辑,只是用来生成一个Marker Bean。由此可知,SBA2就是靠这个Bean来判断是否标注为 Admin Server。

更进一步的,看下这个Marker Bean 用在了哪些地方。
在这里插入图片描述
可见AdminServerUiAutoConfigurationAdminServerAutoConfiguration都通过@ConditionalOnBean 判断了Spring 中是否存在Marker Bean。

由此如果你去掉@EnableAdminServer注解,那监控页面肯定是打不开的。

另外用@Import(AdminServerMarkerConfiguration.class) 代替 @EnableAdminServer 注解,SBA2也是能正常使用的,因为@EnableAdminServer也就是用来导入AdminServerMarkerConfiguration,只有这一个作用。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐