SpringBoot怎么自动部署到内置的Tomcat的?
先看看SpringBoot的主配置类的main方法:

main方法运行了一个run()方法,进去run方法看一下:
/**
* 静态帮助程序,可用于从中运行{@link SpringApplication}
* 使用默认设置指定来源。
* @param primarySource加载的主要源
* @param args应用程序参数(通常从Java main方法传递)
* @返回正在运行的{@link ApplicationContext}
*/
public static ConfigurableApplicationContext run(Class<?> primarySource,
String... args) {
return run(new Class<?>[] { primarySource }, args);
}
我们可以看到run方法注释上写了使用了默认的设置,这些默认的设置就是从Application启动类上面的注解
@SpringBootApplication 中来的。
并且run方法返回了一个正在运行的上下文对象:
ApplicationContext
进入注解@SpringBootApplication中可以看到:

注解中默认的四个方法不用关注。
先看看@ComponentScan 这个注解,它是当容器启动的时候,用来扫描启动类底下所有的类以及所有子包下面的类。

再看看@SpringBootConfiguration这个注解,可以看到它是一个接口,上面有一个@Configuration注解,说明它是一个容器。
从Spring3.0开始,@Configuration用于定义配置类,可替换xml配置文件,@Configuation等价于<Beans></Beans>。

接着看@EnableAutoConfiguration,这是用来开启自动装配的注解。

进入@EnableAutoConfiguration,看到一个@Import,点进去看,注释说明这是用来导入@Configuration的。

@Import的入参 AutoConfigurationImportSelector.class是一个选择器(Selector),用于选择自动装配的类。
进入选择器AutoConfigurationImportSelector,可以看到它调用了一个获取自动装配实体的方法:
getAutoConfigurationEntry

进入获取自动装配实体的方法( getAutoConfigurationEntry ),可以看到它调用了一个获取默认配置的方法,返回值是一个字符串列表。这里把它成为:默认的配置列表。

进入getCandidateConfigurations方法中,通过断言可以知道配置信息是从
META-INF/spring.factories
中来的。最终它们是一个字符串类型的List。

通过IDEA软件的定位功能,可以找到当前方法getCandidateConfigurations所在jar包。


打开spring.factories文件,可以看到springBoot为用户实现的大量自动装配的类:

找到 EmbeddedWebServerFactoryCustomizerAutoConfiguration ,可以看到SpringBoot为用户内置的Tomcat


最后看下spring.factories文件配置的自动装配类@ServletWebServerFactoryAutoConfiguration,在这里Tomcat被启动了。

SpringBoot怎么自动部署到内置的Tomcat的?的更多相关文章
- springboot学习笔记:6.内置tomcat启动和外部tomcat部署总结
springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XX ...
- Windows Azure 自动伸缩已内置
WindowsAzure平台提供的主要优点之一是能够在有需要时快速缩放云中的应用程序以响应波动.去年7月以前,您必须编写自定义脚本或使用其他工具(如Wasabi或MetricsHub)来启用自动 ...
- python基础-requests模块、异常处理、Django部署、内置函数、网络编程
网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...
- SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)
为什么使用定时? 日常工作中,经常会用到定时任务,比如各种统计,并不要求实时性.此时可以通过提前设置定时任务先把数据跑出来,后续处理起来更方便. 本篇文章主要介绍 springboot内置定时任务. ...
- Spring Boot 定制与优化内置的Tomcat容器
1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...
- 使用Maven自动部署Java Web应用到Tomcat服务器
学习如何使用Maven,我推荐一本工具书,<maven the definitive guide>.在这本工具书手中,详细介绍了maven的使用思想,并且提供了从基本到复杂的具体项目应用. ...
- 使用Maven自动部署Java Web项目到Tomcat问题小记
导读 首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤: 首先在Eclipse里将项目打包成war包 将服务器上原来的项目文 ...
- spring boot修改内置容器tomcat的服务端口
方式一 在spring boot的web 工程中,可以使用内置的web container.有时需要修改服务端口,可以通过配置类和@Configuration注解来完成. // MyConfigura ...
- 阻止YII 1.0自动加载内置JQUERY库
有些时候我们会在项目中用到很多js库, 因为Yii 1.0框架会默认自动加载一些自带核心库, 很容易引起冲突问题, 下面的代码就展示了如何在Yii 1.0框架下取消jQuery自动加载. Open C ...
随机推荐
- python 常用模块介绍
1.定义 模块:用来从逻辑上组织python代码(变量.函数.类,逻辑),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test). 包:用来从逻辑上组织模块的,本质就是 ...
- HF Java Chap 1
介绍了java的工作方式以及几个有趣的小程序 Java的工作模式 大体来说有四个步骤: 源代码 编译器 编译器的输出 Java虚拟机 源代码 这是我们程序员接触到的部分.根据我们面临的问题,编写一个符 ...
- Linux USB 鼠标驱动程序详解(转)
Linux USB 鼠标驱动程序详解 USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以 ...
- (转载)Eclipse中使用SVN
为了方便个人使用,转载过来的,如需查阅,请前往原文地址:http://www.cnblogs.com/wvqusrtg/p/4993849.html 1.在Eclipse里下载Subclipse插件 ...
- C++走向远洋——53(项目一1、分数类的重载、加减乘除、比较)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- GoLand2019.03破解与汉化
1.准备工作 (请认真的做好准备工作,否则中途可能会操作失败.) GoLand是JetBrains公司发布的商业版的GO语言编辑器(收费的),本屌目前还没钱购买正版,所以本次教程是以Windows平台 ...
- python爬虫-纠正MD5错误认知
m = md5(".encode()) print(m.hexdigest()) # 25d55ad283aa400af464c76d713c07ad m = md5(".enco ...
- UIView绘制原理,异步绘制
绘制原理 首先看一幅流程图 UIView调用setNeedsDisplay方法后,实际上并没有发生当前视图的绘制工作,而是在之后的某一时机进行绘制工作,为什么会在之后的某一时机进行绘制工作呢? 当UI ...
- 搭建websocket消息推送服务,必须要考虑的几个问题
近年,不论是正在快速增长的直播,远程教育以及IM聊天场景,还是在常规企业级系统中用到的系统提醒,对websocket的需求越来越大,对websocket的要求也越来越高.从早期对websocket的应 ...
- 自定义checkbox, radio样式总结
任务目的 深入了解html label标签 了解CSS边框.背景.伪元素.伪类(注意和伪元素区分)等属性的设置 了解CSS中常见的雪碧图,并能自己制作使用雪碧图 任务描述 参考 样例(点击查看),实现 ...