美文网首页Spring
spring-boot-admin-client启动流程

spring-boot-admin-client启动流程

作者: 王勇1024 | 来源:发表于2019-08-03 15:16 被阅读4次

背景

最近在设计和开发部门的基础架构,基于Spring Cloud可以大幅降低开发成本。其中一个环节是使用spring-boot-admin监听和记录客户端的运行情况,所以需要去研究spring-boot-admin的原理。今天就分析一下spring-boot-admin-client的启动流程。

启动流程

通过 Spring Factories机制 我们知道,要想分析Spring Cloud中一个组件的启动流程,首先应该去看它的META-INF/spring.factories文件。

spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration,\
  de.codecentric.boot.admin.client.config.SpringBootAdminClientCloudFoundryAutoConfiguration

其中SpringBootAdminClientCloudFoundryAutoConfiguration 是针对云平台的配置,我们暂且不用管它。先重点看一下SpringBootAdminClientAutoConfiguration:

@Configuration
@ConditionalOnWebApplication
@Conditional(SpringBootAdminClientEnabledCondition.class)
@AutoConfigureAfter({WebEndpointAutoConfiguration.class, RestTemplateAutoConfiguration.class})
@EnableConfigurationProperties({ClientProperties.class, InstanceProperties.class, ServerProperties.class, ManagementServerProperties.class})
public class SpringBootAdminClientAutoConfiguration

启动条件

Spring条件注解说明 我们知道,要向完成SpringBootAdminClientAutoConfiguration的自动配置,需要满足SpringBootAdminClientEnabledCondition中设置的条件。
到底是哪些条件呢?我们一起来看看SpringBootAdminClientEnabledCondition的源码:

public class SpringBootAdminClientEnabledCondition extends SpringBootCondition {
    @Override
    public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata annotatedTypeMetadata) {
        ClientProperties clientProperties = getClientProperties(context);
        // 条件1:spring.boot.admin.client.enabled=true
        if (!clientProperties.isEnabled()) {
            return ConditionOutcome.noMatch(
                "Spring Boot Client is disabled, because 'spring.boot.admin.client.enabled' is false.");
        }
        // 条件2:spring.boot.admin.client.url不能为空
        if (clientProperties.getUrl().length == 0) {
            return ConditionOutcome.noMatch(
                "Spring Boot Client is disabled, because 'spring.boot.admin.client.url' is empty.");
        }
        return ConditionOutcome.match();
    }

    private ClientProperties getClientProperties(ConditionContext context) {
        // 创建一个ClientProperties实例
        ClientProperties clientProperties = new ClientProperties(context.getEnvironment());
        Binder.get(context.getEnvironment()).bind("spring.boot.admin.client", Bindable.ofInstance(clientProperties));
        // 将spring.boot.admin.client.* 参数绑定到 ClientProperties实例上
        return clientProperties;
    }
}

从上面的代码中可以看出,要想启动spring-boot-admin-client至少需要满足两个条件:

    1. spring.boot.admin.client.enabled=true
    1. spring.boot.admin.client.url 不能为空

并且,这里的ClientProperties是new出来的,而不是通过@Autowire自动注入的,也就意味着我们不能通过@Bean来自己注入ClientProperties,而只能在配置文件中配置相关参数。

SpringBootAdminClientAutoConfiguration

metadata

  • MetadataContributor:存放spring-boot-admin-client应用的一些元数据信息的接口;
  • StartupDateMetadataContributor:实现了MetadataContributor接口,用于记录系统启动时间;
  • CloudFoundryMetadataContributor:实现了MetadataContributor接口,用于记录云平台相关配置参数,包括applicationId和instanceId;
  • CompositeMetadataContributor:实现了MetadataContributor接口,用于代理上述两个MetadataContributor实现类,返回其中包含的所有元数据信息。

ApplicationFactory

ApplicationRegistrator

RegistrationApplicationListener

相关文章

网友评论

    本文标题:spring-boot-admin-client启动流程

    本文链接:https://www.haomeiwen.com/subject/rxhjdctx.html