专栏首页架构师玄学之路微服务架构-SpringBoot2.0.3源码之web容器篇(一)

微服务架构-SpringBoot2.0.3源码之web容器篇(一)

  1. 背景 从事java开发的同学,应该都经历过如下的开发经历:老大突然交接给你一个项目,但是项目已经经手过N+1个人,项目子工程通常都很多,整个项目到处都是xml配置文件,属性配置文件等,你除了要快速的熟悉业务代码逻辑,还要频繁的应付杂乱无章的配置文件,是不是觉得很头疼,这里就列举SpringBoot框架的一个好处,就是无xml,如果不熟悉SpringBoot框架,可以自我学习升级,这里主要要介绍SpringBoot2.0.X系列web容器篇的架构改进。(备注:都是个人理解,如有不符合大众思维,请指出)
  2. SpringBoot 整体模块设计

SpringBoot高度模块化,特别适合需要高度模块化的业务项目,SpringBoot整体设计思路就是简单、高效、剥离组件、省代码。

1)spring-boot

封装了需要走自动配置的公共bean,例如数据源DataSourceBuilder,负责SpringBoot支持的数据源的底层逻辑处理。

2)spring-boot-autoconfigure

自动配置模块,@EnableAutoConfiguration注解触发所有需要走自动配置的组件,比如DataSourceAutoConfiguration,会在Server容器启动的时候自动的注入。

3)spring-boot-starters

暴露模块中间件给使用方,高度的模块化,具体的模块化细节请参考源码,例如需要使用AMQP,只需要引入spring-boot-starter-amqp,spring-boot-starter-amqp会自动的集成spring-boot-starter、spring-messaging和spring-rabbit

4)spring-boot-cli

spring-boot-cli可以快速搭建一个spring原型应用,并且可以运行Groovy脚本

5)spring-boot-actuator

SpringBoot还提供了许多附加功能,可以帮助我们在应用程序部署到生产环境后对其进行监控和管理。springboot提了http,jmx,shell等功能来管理和监控我们的应用程序。另外审计,监控和性能指标的可以自动应用到应用程序上。

6)spring-boot-loader

SpringBoot允许使用java -jar命令启动模块

7)spring-boot-tools

SpringBoot提供的通用的工具模块

spring-boot-configuration-processor:使用@ConfigurationProperties生成元数据,元数据处理模块

spring-boot-configuration-metadata:元数据模块

.....

.....

3. SpringBoot2.0.X web容器模块设计

SpringBoot2.0重构了web容器模块,植入了嵌入式容器,使用工厂设计模式和模板设计模式,完美的将流式web容器和基于Servlet的容器在代码层隔离,灵活配置,完全解耦,开箱即用,模块设计如下:

熟悉web开发的同学都知道,凡是需要Servlet特性的业务场景,项目必须要在web容器中启动,比如Tomcat、jetty等,但是如果项目只是api-gateway,只是提供一些请求路由功能,那么就完全需要使用Netty这样无阻塞的高性能NIO框架,因此SpringBoot2.0.X集成了Netty。

SpringBoot是如何做到内置容器和外置容器的灵活切换,原理分析如下:

1)外置容器启动

War包需要借助SpringBoot框架内嵌容器之外的web容器启动,应用可以重载SpringBootServletInitializer.configure方法+注解@SpringBootApplication,从内置容器切换到外置容器,如果需要了解切换原理,需要详细的翻阅SpringBootServletInitializer源码,SpringBootServletInitializer继承org.springframework.web.WebApplicationInitializer,暴露configure方法,让应用可以重写,并重新构造SpringApplicationBuilder,并绑定Servlet、Filter和ServletContextInitializer支持应用war包部署。

2) 内置标准容器启动

java虚拟机会自动的去加载main方法,通过main方法来委托Spring Boot的SpringApplication类,SpringApplication.run引导我们的应用程序,启动Spring,然后启动自动配置的Tomcat Web服务器。其实SpringApplication.run方法也是模拟传统的web容器启动war的原理,将jar包自动的加载的内置的容器中,具体原理将在接下来的文章中输出。

本文分享自微信公众号 - 架构师玄学之路(andy_aty),作者:胡弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务架构-SpringBoot2.0.3源码之web容器篇(二)

    用户6969969
  • 读-成功人士的七个习惯-这本书的自我感受

    第一点我自己理解,是要我们在生活中多一点思考,提前准备,等到事情发生的时候,我们可以有更多的选择机会

    用户6969969
  • CNCF-生活到底是什么?什么才是我们的羁绊?

    这几天在家,瞅瞅CNCF这张密密麻麻的全景图,突然意识到生活到底是什么?什么才是我们生活的羁绊?什么才能驱动自己去理解这张图的含义。

    用户6969969
  • 一个开发者的Linux Containers之旅

    告诉你们一个秘密:所有的DevOps 云工具是如何进入我的应用程序又与世界联系起来的对我来说至今仍然是一个迷。但是,随着时间的推移,我已经逐渐意识到,了解如何去...

    CSDN技术头条
  • 容器和微服务器如何改变安全性

    原生云应用程序和基础设施需要完全不同的安全方法。请牢记下面这些最佳实践。 ? 如今,大大小小的组织正在探索云原生软件技术的应用。“原生云(cloud-nati...

    静一
  • 复制文件到正在运行的Docker容器中

    通过之前的章节,你已经可以灵活控制容器了,那么在接下来的几篇文章中,我们来练习通过修改容器来创建一个个性化的镜像,然后发布到Dockerhub、阿里云、Azur...

    角落的白板报
  • 技术洞见:公有云容器市场发展及安全问题

    因为操作的简单性和可扩展性,云容器服务得到越来越多企业的重视。通过容器技术可显著提高开发人员和运营人员的效率。

    CloudBest
  • 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

    宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理、应用商店、Nginx配置、存储管理、CI/CD、权限管理等,支持...

    宜信技术学院
  • 了解云容器的四方面

    对容器的大量需求使企业推出了各种云容器服务。而市场上这么多的选择,很难决定去使用哪一个容器平台或工具。在你了解云容器技术的选择之前,你必须先确定容器是否值得您的...

    企鹅号小编
  • [docker](八)docker -- 网络管理

    如图所示,Docker daemon通过调用libnetwork对外提供的API完成网络的创建和管理等功能。libnetwork中则使用了CNM来完成网络功能的...

    baron

扫码关注云+社区

领取腾讯云代金券