`
gaozzsoft
  • 浏览: 427009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Spring Boot启动流程概述

 
阅读更多

 

1、创建SpringApplication实例:

 

  public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) {

        this.sources = new LinkedHashSet();

        this.bannerMode = Mode.CONSOLE;

        this.logStartupInfo = true;

        this.addCommandLineProperties = true;

        this.headless = true;

        this.registerShutdownHook = true;

        this.additionalProfiles = new HashSet();

        this.resourceLoader = resourceLoader;

        Assert.notNull(primarySources, "PrimarySources must not be null");

        this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));

        this.webApplicationType = this.deduceWebApplicationType();

        this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));

        this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));

        this.mainApplicationClass = this.deduceMainApplicationClass();

    }

/META-INF/spring.factories  文件 

 

# PropertySource Loaders

org.springframework.boot.env.PropertySourceLoader=\

org.springframework.boot.env.PropertiesPropertySourceLoader,\

org.springframework.boot.env.YamlPropertySourceLoader

 

# Run Listeners

org.springframework.boot.SpringApplicationRunListener=\

org.springframework.boot.context.event.EventPublishingRunListener

 

# Error Reporters

org.springframework.boot.SpringBootExceptionReporter=\

org.springframework.boot.diagnostics.FailureAnalyzers

 

# Application Context Initializers

org.springframework.context.ApplicationContextInitializer=\

org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\

org.springframework.boot.context.ContextIdApplicationContextInitializer,\

org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\

org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer

 

# Application Listeners

org.springframework.context.ApplicationListener=\

org.springframework.boot.ClearCachesApplicationListener,\

org.springframework.boot.builder.ParentContextCloserApplicationListener,\

org.springframework.boot.context.FileEncodingApplicationListener,\

org.springframework.boot.context.config.AnsiOutputApplicationListener,\

org.springframework.boot.context.config.ConfigFileApplicationListener,\

org.springframework.boot.context.config.DelegatingApplicationListener,\

org.springframework.boot.context.logging.ClasspathLoggingApplicationListener,\

org.springframework.boot.context.logging.LoggingApplicationListener,\

org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener

 

# Environment Post Processors

org.springframework.boot.env.EnvironmentPostProcessor=\

org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\

org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor,\

org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor

 

# Failure Analyzers

org.springframework.boot.diagnostics.FailureAnalyzer=\

org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.BindValidationFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyNameFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyValueFailureAnalyzer

 

# FailureAnalysisReporters

org.springframework.boot.diagnostics.FailureAnalysisReporter=\

org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter

将传入的启动类"com.example.ms.DemoApplication"放入Set集合中

判断是否为Web环境:存在(javax.servlet.Servlet && org.springframework.web.context.ConfigurableWebApplicationContext )类则是

创建并初始化ApplicationInitializer列表 (spring.factories)

创建并初始化ApplicationListener列表  (spring.factories)

初始化主类mainApplicatioClass    (DemoApplication)

2、启动run方法

 

public ConfigurableApplicationContext run(String... args) {

        StopWatch stopWatch = new StopWatch();

        stopWatch.start();

        ConfigurableApplicationContext context = null;

        Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList();

        this.configureHeadlessProperty();

        SpringApplicationRunListeners listeners = this.getRunListeners(args);

        listeners.starting();

 

        Collection exceptionReporters;

        try {

            ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);

            ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments);

            this.configureIgnoreBeanInfo(environment);

            Banner printedBanner = this.printBanner(environment);

            context = this.createApplicationContext();

            exceptionReporters = this.getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[]{ConfigurableApplicationContext.class}, context);

            this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);

            this.refreshContext(context);

            this.afterRefresh(context, applicationArguments);

            stopWatch.stop();

            if (this.logStartupInfo) {

                (new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch);

            }

 

            listeners.started(context);

            this.callRunners(context, applicationArguments);

        } catch (Throwable var10) {

            this.handleRunFailure(context, var10, exceptionReporters, listeners);

            throw new IllegalStateException(var10);

        }

 

        try {

            listeners.running(context);

            return context;

        } catch (Throwable var9) {

            this.handleRunFailure(context, var9, exceptionReporters, (SpringApplicationRunListeners)null);

            throw new IllegalStateException(var9);

        }

    }

创建计时器StopWatch

配置awt系统属性

获取SpringApplicationRunListeners

启动SpringApplicationRunListeners

创建ApplicationArguments

创建并初始化ConfigurableEnvironment

打印Banner

创建ConfigurableApplicationContext

准备ConfigurableApplicationContext

刷新ConfigurableApplicationContext

容器刷新后动作

SpringApplicationRunListeners发布finish事件

计时器停止计时

 

Spring Boot启动流程详解

 

 

分享到:
评论

相关推荐

    Spring Boot讲义.pdf

    Spring Boot是一个基于Spring框架的开源Java平台,它简化了基于Spring的应用开发过程。在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot...

    十分钟上手spring boot

    ##### 一、Spring Boot文档概述 **1. 关于本文档** 本文档旨在帮助初学者快速掌握Spring Boot的基本操作与核心概念,适合那些希望迅速上手Spring Boot项目的新手。 **2. 获取帮助** 对于学习过程中遇到的问题,...

    spring boot入门教程

    #### Spring Boot 框架概述 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式(习惯优于配置)来简化整个 Spring 应用的配置。Spring Boot 的...

    Spring Boot参考指南

    以上只是《Spring Boot参考指南》中部分内容的概述,实际指南会包含更多关于如何使用Spring Boot创建、配置和管理应用的详细指导,包括Spring Boot与其他技术(如Spring Cloud、MyBatis、MongoDB等)的集成,以及...

    Spring Boot + Vue3 完整开发全栈项目附资料.zip

    Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量的常用功能,如自动配置、内嵌Servlet容器、健康检查、Actuator等,极大地提高了开发效率。 二、Vue3概述 Vue3...

    Spring Boot Vue前后端分离开发实战.pdf

    Spring Boot是基于Spring框架的一个项目,目的是简化新Spring应用的初始搭建以及开发过程。它使用"约定优于配置"的原则,提供了大量默认配置,减少了项目配置的复杂性。Spring Boot的核心特性包括自动配置、起步依赖...

    spring-boot-reference

    ### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览与入门 **1. 关于文档** - **版本说明**:该文档版本为 1.2.5.RELEASE,由 Phillip Webb、Dave Syer、Josh Long 等多位专家共同编撰。 - **...

    spring boot 入门开发

    ### Spring Boot 入门开发知识点概述 #### 一、Spring Boot 基本介绍 - **微服务架构**:在现代软件开发中,微服务架构是一种流行的设计模式,它将单个应用程序分解为一组小型、独立的服务,每个服务执行特定的...

    JavaEE颠覆者spring-boot实战源码.zip

    Spring Boot是Java EE开发领域的一股强大力量,它简化了传统的Java企业级应用的配置和启动过程,被誉为“JavaEE的颠覆者”。这个压缩包包含的“JavaEE颠覆者spring-boot实战源码”提供了丰富的示例和实战教程,帮助...

    Spring Boot技术培训

    ### Spring Boot 技术培训知识点概述 #### 一、Spring Boot 入门 ##### 1.1 Spring Boot 简介 Spring Boot 是基于 Spring 平台和一系列框架的项目,旨在简化新 Spring 应用程序的初始设置和配置。Spring Boot 的...

    Spring Boot是一个开源的Java框架,旨在简化Spring应用的初始搭建和开发过程 以下是对Spring Boot开发

    ### Spring Boot概述与优势 #### 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的一个开源Java框架,它的核心目标是简化Spring应用的搭建和开发过程。通过大量的默认配置和自动化配置机制,Spring Boot极大...

    spring-boot-reference2018最新版

    Spring Boot提供了丰富的测试支持,包括`@SpringBootTest`用于启动整个Spring Boot应用进行集成测试,`@WebMvcTest`用于只启动Web层进行Controller测试,`@DataJpaTest`用于JPA数据访问层的测试等。 9. **日志** ...

    spring-boot源码

    Spring Boot是Java开发领域的一款非常流行的微服务框架,它简化了Spring应用的初始搭建以及开发过程。Spring Boot的核心设计理念是“约定优于配置”,通过提供预配置的starter来快速构建应用程序。下面,我们将深入...

    [E文]Spring Boot 2 Recipes

    **Spring Boot 2** 是基于流行的 Java 开发框架 Spring 的一个子项目,旨在简化新 Spring 应用程序的初始设置和开发过程。它通过提供默认配置来减少搭建项目的复杂性,并且能够快速启动和运行。Spring Boot 2 支持...

    spring-boot-reference-guide-zh

    ### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览 - **文档定位**:本文档旨在全面介绍Spring Boot的功能与使用方式,面向初学者及具有一定经验的开发者。 - **获取帮助**:提供多种渠道帮助...

    Spring Boot参考指南.pdf

    ### Spring Boot参考指南知识点概述 #### 一、Spring Boot 文档概述 - **关于本文档**:本指南旨在提供Spring Boot全面的使用手册,适用于初学者到进阶开发者。 - **获取帮助**:介绍了如何获得Spring Boot相关的...

    Spring Boot技术栈博客企业前后端2018 - 副本.txt

    - **目标**:Spring Boot的目标是让开发者能够快速启动Spring项目,并通过自动配置减少样板代码的编写,提高开发效率。 - **适用场景**:适用于构建微服务、Web应用、数据处理应用等。 #### 2. **Spring Boot的...

    Spring Boot 参考指南

    - **简明概述**:Spring Boot 通过提供预配置来减少项目搭建的时间,并且简化了部署流程,使得开发者可以更加专注于应用程序的核心功能。 #### 二、Spring Boot 基础 1. **简介** - Spring Boot 提供了一种快速...

    spring boot web demo

    Spring Boot简化了Spring的应用启动和配置,使得开发过程更加高效。在这个项目中,我们将探讨Spring Boot的核心特性以及如何利用它来开发Web应用。 1. Spring Boot概述:Spring Boot是由Pivotal Team创建的,其目标...

    spring boot35.zip

    1.1 Spring Boot简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用程序的初始搭建以及开发过程。它通过提供“起步依赖”(Starter POMs)来自动配置Spring框架,使得开发者能够快速构建...

Global site tag (gtag.js) - Google Analytics