Spring Boot Admin2 AdminServerAutoConfiguration详解

其他相关文章:

  1. Spring Boot Admin 参考指南
  2. SpringBoot Admin服务离线、不显示健康信息的问题
  3. Spring Boot Admin2 @EnableAdminServer的加载

前面已经分析了@EnableAdminServer的作用,唯一的功能是将AdminServerMarkerConfiguration.Marker类加载到Spring中,并且知道了AdminServerAutoConfiguration类的加载依赖于AdminServerMarkerConfiguration.Marker类。
这篇文章主要来分析AdminServerAutoConfiguration的作用,加载了哪些东西。

首先AdminServerAutoConfiguration类头部有如下几个注解:

@Configuration(proxyBeanMethods = false)
@Conditional(SpringBootAdminServerEnabledCondition.class)
@ConditionalOnBean(AdminServerMarkerConfiguration.Marker.class)
@EnableConfigurationProperties(AdminServerProperties.class)
@ImportAutoConfiguration({ AdminServerInstanceWebClientConfiguration.class, AdminServerWebConfiguration.class })
@AutoConfigureAfter({ WebClientAutoConfiguration.class })
@Lazy(false)
  • @Configuration(proxyBeanMethods = false)
    表示是一个配置类,并且不被Spring 代理,如同普通类一样
  • @Conditional(SpringBootAdminServerEnabledCondition.class)
    根据SpringBootAdminServerEnabledCondition做为条件判断是否加载该类,SpringBootAdminServerEnabledCondition中根据spring.boot.admin.server.enabled是否为true来处理,优先级最高
  • @ConditionalOnBean(AdminServerMarkerConfiguration.Marker.class)
    判断Spring容器中是否存在AdminServerMarkerConfiguration.Marker 的Bean
  • @EnableConfigurationProperties(AdminServerProperties.class)
    启用AdminServerProperties配置文件,AdminServerProperties能够做为Bean 注入该类,其是我们常用的spring.boot.admin 相关配置
  • @ImportAutoConfiguration({ AdminServerInstanceWebClientConfiguration.class, AdminServerWebConfiguration.class })
    加载AdminServerInstanceWebClientConfiguration、AdminServerWebConfiguration配置类。AdminServerInstanceWebClientConfiguration 包括了一系列服务实例Http调用相关的Bean配置。AdminServerWebConfiguration定义了SBA2监控相关的接口Controller,以及ReactiveRestApiConfiguration和ServletRestApiConfirguation相关的配置
  • @AutoConfigureAfter({ WebClientAutoConfiguration.class })
    顾名思义,表示该类将在WebClientAutoConfiguration载入后,再加载
  • @Lazy(false)
    表示不延迟加载,覆盖默认配置

再往下看,是构造器部分

	private final AdminServerProperties adminServerProperties;

	public AdminServerAutoConfiguration(AdminServerProperties adminServerProperties) {
		this.adminServerProperties = adminServerProperties;
	}

这里将AdminServerProperties配置以构造器的方式注入该类

继续看其他加载的配置

	@Bean
	@ConditionalOnMissingBean
	public InstanceRegistry instanceRegistry(InstanceRepository instanceRepository,
			InstanceIdGenerator instanceIdGenerator) {
		return new InstanceRegistry(instanceRepository, instanceIdGenerator);
	}

该部分创建了一个用于管理实例注册的Bean,InstanceRepository 用于提供实例的持久化,InstanceIdGenerator 用于生成实例id

	@Bean
	@ConditionalOnMissingBean
	public ApplicationRegistry applicationRegistry(InstanceRegistry instanceRegistry,
			InstanceEventPublisher instanceEventPublisher) {
		return new ApplicationRegistry(instanceRegistry, instanceEventPublisher);
	}

该部分创建一个用于管理所有已注册的应用

	@Bean
	@ConditionalOnMissingBean
	public InstanceIdGenerator instanceIdGenerator() {
		return new HashingInstanceUrlIdGenerator();
	}

该部分创建了一个根据实例健康URL地址来生成实例ID的Bean

	@Bean
	@ConditionalOnMissingBean
	public StatusUpdater statusUpdater(InstanceRepository instanceRepository,
			InstanceWebClient.Builder instanceWebClientBulder) {
		return new StatusUpdater(instanceRepository, instanceWebClientBulder.build());
	}

该部分创建了一个用于查询更新实例状态的Bean

	@Bean(initMethod = "start", destroyMethod = "stop")
	@ConditionalOnMissingBean
	public StatusUpdateTrigger statusUpdateTrigger(StatusUpdater statusUpdater, Publisher<InstanceEvent> events) {
		StatusUpdateTrigger trigger = new StatusUpdateTrigger(statusUpdater, events);
		trigger.setInterval(this.adminServerProperties.getMonitor().getStatusInterval());
		trigger.setLifetime(this.adminServerProperties.getMonitor().getStatusLifetime());
		return trigger;
	}

StatusUpdateTrigger 会在加载的时候开启一个定时任务,用来检查所有实例的状态,检测周期和状态生存时间可以通过spring.boot.admin.monitor.status-intervalspring.boot.admin.monitor.status-lifetime配置。除此之外,其监听了实例变更事件,会在实例注册和实例更新的时候,触发去更新实例状态。

	@Bean
	@ConditionalOnMissingBean
	public EndpointDetector endpointDetector(InstanceRepository instanceRepository,
			InstanceWebClient.Builder instanceWebClientBuilder) {
		InstanceWebClient instanceWebClient = instanceWebClientBuilder.build();
		ChainingStrategy strategy = new ChainingStrategy(new QueryIndexEndpointStrategy(instanceWebClient),
				new ProbeEndpointsStrategy(instanceWebClient, this.adminServerProperties.getProbedEndpoints()));
		return new EndpointDetector(instanceRepository, strategy);
	}

EndpointDetector 用于检测实例暴露的端点

	@Bean(initMethod = "start", destroyMethod = "stop")
	@ConditionalOnMissingBean
	public EndpointDetectionTrigger endpointDetectionTrigger(EndpointDetector endpointDetector,
			Publisher<InstanceEvent> events) {
		return new EndpointDetectionTrigger(endpointDetector, events);
	}

EndpointDetectionTrigger 实例端点检测触发器,在实例状态变更和实例注册更新的时候,触发检测

	@Bean
	@ConditionalOnMissingBean
	public InfoUpdater infoUpdater(InstanceRepository instanceRepository,
			InstanceWebClient.Builder instanceWebClientBuilder) {
		return new InfoUpdater(instanceRepository, instanceWebClientBuilder.build());
	}

InfoUpdater 调用info接口,更新实例信息

	@Bean(initMethod = "start", destroyMethod = "stop")
	@ConditionalOnMissingBean
	public InfoUpdateTrigger infoUpdateTrigger(InfoUpdater infoUpdater, Publisher<InstanceEvent> events) {
		InfoUpdateTrigger trigger = new InfoUpdateTrigger(infoUpdater, events);
		trigger.setInterval(this.adminServerProperties.getMonitor().getInfoInterval());
		trigger.setLifetime(this.adminServerProperties.getMonitor().getInfoLifetime());
		return trigger;
	}

InfoUpdateTrigger 实例信息检查触发器,道理同StatusUpdateTrigger

	@Bean
	@ConditionalOnMissingBean(InstanceEventStore.class)
	public InMemoryEventStore eventStore() {
		return new InMemoryEventStore();
	}

InMemoryEventStore 实例存储类,基于ConcurrentMap

	@Bean(initMethod = "start", destroyMethod = "stop")
	@ConditionalOnMissingBean(InstanceRepository.class)
	public SnapshottingInstanceRepository instanceRepository(InstanceEventStore eventStore) {
		return new SnapshottingInstanceRepository(eventStore);
	}

SnapshottingInstanceRepository 实例持久化类,用于操作InstanceEventStore

到此AdminServerAutoConfiguration自动配置类结束

  • 103
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿提说说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值