0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心
发布

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Boot启动 Eureka流程

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-10 11:40 次阅读

在上篇中已经说过了 Eureka-Server 本质上是一个 web 应用的项目,今天就来看看 Spring Boot 是怎么启动 Eureka 的。

Spring Boot 启动 Eureka 流程

@SpringBootApplication@EnableEurekaServerpublic class EurekaServer {publicstaticvoidmain(String[] args) {SpringApplication.run(EurekaServer.class, args); } }

上面的代码是最最平常的 Spring Boot 启动类。Spring Boot 启动 eureka 的关键注解就在 @EnableEurekaServer 上面。

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Import({EurekaServerMarkerConfiguration.class}) public@interfaceEnableEurekaServer { }

可以看到这注解导入了一个 EurekaServerMarkerConfiguration 类。

@ConfigurationpublicclassEurekaServerMarkerConfiguration{@BeanpublicMarkereurekaServerMarkerBean(){returnnewMarker(); }classMarker{ } }

EurekaServerMarkerConfiguration 向 Spring 容器注入了一个 EurekaServerMarkerConfiguration.Marker 对象。Maker 是一个空对象,是一个标记开关的类。具体开关的类在上面的注释中。

/** * Responsible foradding in a marker bean toactivate * {@linkEurekaServerAutoConfiguration} * *@authorBiju Kunjummen */

EurekaServerMarkerConfiguration.Marker 对象用于激活 EurekaServerAutoConfiguration 类。

那 EurekaServerAutoConfiguration 类是在什么时候加载的呢?

图片

org.springframework.boot.autoconfigure.EnableAutoConfiguration= org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration

如上图,EurekaServerAutoConfiguration 启动的调用是在 spring.factories 中的,在 Spring Boot 的启动过程中,会加载所有的 spring.factories。这个时候会读取并加载里面的内容到 Spring 中。

  • @Import(EurekaServerInitializerConfiguration.class):初始化 EurekaServerAutoConfiguration 的时候会导入 EurekaServerInitializerConfiguration 类。
  • @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class):当 Spring 中有 EurekaServerMarkerConfiguration.Marker 类的实例存在就把 EurekaServerAutoConfiguration 也导入到 Spring 的容器中。
publicclassEurekaServerInitializerConfigurationimplementsServletContextAware, SmartLifecycle, Ordered
  • ServletContextAware:实现这个类可以获取到 ServletContext 容器上下文。
  • SmartLifecycle:当 Spring 容器加载所有 bean 并完成初始化之后,会接着回调实现该接口的类中对应的 start() 方法

看一下 start() 方法里面调用了什么?

@Overridepublicvoidstart(){newThread(newRunnable(){@Overridepublicvoidrun(){try{ eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext); log.info("Started Eureka Server"); publish(newEurekaRegistryAvailableEvent(getEurekaServerConfig())); EurekaServerInitializerConfiguration.this.running =true; publish(newEurekaServerStartedEvent(getEurekaServerConfig())); }catch(Exception ex) {// Help!log.error("Could not initialize Eureka servlet context", ex); } } }).start(); }

start() 启动了一个线程,在线程里面 Start 了 Eureka Server。eurekaServerBootstrap 是一个自动注入 EurekaServerBootstrap 的对象。EurekaServerBootstrap 在上一篇中已经说过了,它是 Eureka Server 的启动类。最后看看它的 contextInitialized() 方法。

publicvoidcontextInitialized(ServletContext context) {try{ initEurekaEnvironment(); initEurekaServerContext(); context.setAttribute(EurekaServerContext.class.getName(), this.serverContext); }catch(Throwablee) { log.error("Cannot bootstrap eureka server :", e);thrownewRuntimeException("Cannot bootstrap eureka server :", e); } }

contextInitialized 方法调用了 initEurekaEnvironment(),初始化 Eureka 的运行环境;initEurekaServerContext(),初始化 Eureka 的上下文。

总结

Spring Boot 启动 Erueka Server 经历了一下步骤:

  1. @EnableEurekaServer 注解
  2. 注入了 EurekaServerMarkerConfiguration.Marker 对象
  3. 判断容器里是否有 EurekaServerMarkerConfiguration.Marker 对象注入了 EurekaServerAutoConfiguration
  4. 导入了实现 SmartLifecycle 接口的 EurekaServerInitializerConfiguration 类
  5. Spring 容器在初始化后调用了 EurekaServerInitializerConfiguration 对象的 start() 方法
  6. start() 中启动了一个线程,调用了 Erueka Server 的启动类:EurekaServerBootstrap。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1250

    浏览量

    68981
  • 容器
    +关注

    关注

    0

    文章

    485

    浏览量

    21963
  • eureka
    +关注

    关注

    0

    文章

    4

    浏览量

    1755
  • SpringBoot
    +关注

    关注

    0

    文章

    172

    浏览量

    141
收藏 人收藏

    评论

    相关推荐

    启动SpringBoot项目应用的三种方法

    基础。我们知道了 Spring Boot是个什么了,那么我们又该如何 启动 Spring Boot应用呢?这里小编给大家推荐常用的三种方法。分别是
    发表于01-14 17:33

    SpringBoot嵌入式Web容器原理是什么

    同样改变了一个传统的Web应用服务的 启动 流程和部署方式。通过自动配置机制, Spring Boot提供了一个
    发表于12-16 07:57

    SpringBoot定时任务的重写方法

    Spring Boot应该是目前最火的java开源框架了,它简化了我们创建一个web服务的过程,让我们可以在很短时间、基本零配置就可以 启动一个web服务。
    的头像 发表于01-20 17:38 2317次阅读

    SpringBoot从零入门1 详述

    在开始学习 Spring Boot之前,我之前从未接触过 Spring相关的项目,Java基础还是几年前自学的,现在估计也忘得差不多了吧,写 Spring
    的头像 发表于12-10 22:18 515次阅读

    Spring认证」什么是SpringGraphQL?

    这个项目建立在 Boot2.x 上,但它应该与最新的 Boot2.4.x5 相关。 要创建项目,请转到start. spring.io并为要使用的GraphQL传输选择 启动器:
    的头像 发表于08-10 14:08 703次阅读
    「<b class='flag-5'>Spring</b>认证」什么是<b class='flag-5'>Spring</b> GraphQL?

    HABboot启动流程与实现步骤

    在《深扒HAB boot 启动安全性》中,小编介绍了HAB boot启动 流程(如图1所示),其中的1、2、3验证步骤本质上就是验签过程。
    的头像 发表于08-12 09:39 1334次阅读

    SpringBoot特有的实践

    Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用 Spring Boot所采用的最佳实践。这些内容是基于我的个人经验
    的头像 发表于09-29 10:24 762次阅读

    强大的SpringBoot3.0要来了

    来源:OSC开源社区(ID:oschina2013) Spring Boot3.0 首个 RC 已发布,此外还为两个分支发布了更新:2.7.5 2.6.13。 3.0.0-RC1: https
    的头像 发表于10-31 11:17 1350次阅读

    SpringBootWeb相关的基础知识

    上一篇文章我们已经学会了如何通过IDEA快速建立一个 Spring Boot项目,还介绍了 Spring Boot项目的结构,介绍了项目配置文件pom.xml的组成部分,并且撰写了我们
    的头像 发表于03-17 15:03 541次阅读

    EurekaServer面向接口的方式读取配置文件

    eurekasersver 配置环境 在上一篇中已经介绍了, spring boot是调用 类的 方法 启动 EurekaServer 的
    的头像 发表于10-09 17:05 446次阅读
    <b class='flag-5'>Eureka</b> Server面向接口的方式读取配置文件

    SpringBootActuator快速入门

    不知道大家在写 Spring Boot项目的过程中,使用过 Spring BootActuator 吗?知道 Spring
    的头像 发表于10-09 17:11 478次阅读

    SpringBoot启动原理

    来指定依赖,才能够运行。我们今天就来分析讲解一下 Spring Boot启动原理。 1. Spring Boot打包插件
    的头像 发表于10-13 11:44 510次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的<b class='flag-5'>启动</b>原理

    SpringBoot的设计目标

    什么是 Spring Boot Spring BootSpring开源组织下的一个子项目,也是 S
    的头像 发表于10-13 14:56 456次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的设计目标

    安全启动SecureBoot流程

    安全 启动-Secure Boot除了NSPE和SPE两个环境的沟通 流程之外,secure boot也是Trusted Firmware很重要的设计环节。 Secure
    的头像 发表于11-02 16:45 1012次阅读
    安全<b class='flag-5'>启动</b>Secure <b class='flag-5'>Boot</b><b class='flag-5'>流程</b>

    springboot启动流程

    Spring Boot启动 流程可以分为以下几个步骤:初始化 启动环境、加载自动配置类、创建 Spr
    的头像 发表于11-22 16:04 525次阅读