《Springcloud设计思想》4-springcloud怎么扩展的Springboot

上面一节我们简单的了解spring-cloud-commons做了云服务的一些标准抽象,各大厂商在此标准上做了很多不同的云服务实现方案,比如netflix-eureka,cloud-zookeeper,cloud-alibaba等,这些实现方案是对sping-cloud-commons的具体实现。能够提供完整的Spring-cloud的功能。但是这些实现都是基于Spring-cloud体系实现的,而Spring-boot可以基于Spring-boot进行快速搭建和开发。那我们就简单的看下Spring-cloud是怎么扩展的Springboot。

其实基于前面《spring-boot》系列,大家应该知道,Spring-boot为了扩展Spring-framework,引入基本组件SpringApplication。所以Springboot的基础组件如下

在SpringApplication的帮助下,Spring-boot扩展了ApplicationContext的生命周期,因为我们之前在监听ApplicationContext的声明周期事件的时候,只能监听到4种:

  1. ContextStartedEvent
  2. ContextRefreshEvent
  3. ContextStopEvent
  4. ContextClosedEvent

而在Springboot中,我们可以多监听6种SpringApplication的事件

  1. ApplicationStartingEvent
  2. ApplicationEnvironmentPreparedEvent
  3. ApplicationPreparedEvent
  4. ApplicationStartedEvent
  5. ApplicationReadyEvent
  6. ApplicationFailedEvent

spring-cloud就是因为监听了ApplicationEnvironmentPreparedEvent事件,做到了云服务的功能扩展。这个地方就要介绍一个对云服务特别重要的事件监听类:

BootstrapApplicationListener

这个类是spring-cloud引入的,是创建一个bootstrap的ApplicationContext,作为Springboot创建的ApplicaitionContext的父context。

有个需要注意的事情,BootstrapApplicationListener会修改Environment,这个Environment是父子公用的,BootstrapApplicationListener会新建一个名叫:“bootstrap”的PropertyResources加入到Environment的PropertySources中。bootstrap的propertyResources会读取bootstrap.yaml或者bootstrap.properties中的配置。所以一般spring-cloud需要用到的属性,会放置在bootstrap.yaml。比如spring.application.name。不过根据Environment的运行原理,我们把spring.application.name放置到application.yaml里面也可以。但是为了遵循规约,我们还是要新建一个bootstrap.yaml文件。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/David_lou/article/details/108829818