文章目录
- [SpringBoot 简介](#SpringBoot 简介)
- [SpringBoot 的特点](#SpringBoot 的特点)
- [学习 SpringBoot 的目的](#学习 SpringBoot 的目的)
- [SpringBoot 的发展历史](#SpringBoot 的发展历史)
-
- 发布里程碑
- [SpringBoot 1.0](#SpringBoot 1.0)
- [SpringBoot 1.1](#SpringBoot 1.1)
- [SpringBoot 1.2](#SpringBoot 1.2)
- [SpringBoot 1.3](#SpringBoot 1.3)
- [SpringBoot 1.4](#SpringBoot 1.4)
- [SpringBoot 1.5](#SpringBoot 1.5)
- [SpringBoot 2.0](#SpringBoot 2.0)
如果文章对您有用,请关注点赞加收藏,博主会持续更新相关的专栏笔记🫡
SpringBoot 简介
SpringBoot 是由 Pivotal 团队在 2014 年发布的全新框架。从 SpringBoot 的 LOGO 中可以看到,SpringBoot 是要打造一个快速构建的 Spring 应用,如图所示:

正如官网介绍:
"SpringBoot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. SpringBoot takes an opinionated view of building production ready application."
翻译过来的意思大概是:SpringBoot 的设计是可以尽可能快地启动和运行,只需要最少的 Spring 配置。SpringBoot 对构建生产就绪应用程序具有独特的方式。从官方的介绍可以看出 SpringBoot 的核心思想是"约定优先于配置【Convention Over Configuration】",其本质其实还是基于 Spring 来实现的。对于了解 Spring 的人或者使用过 Spring 的人来说,Spring 烦琐的配置让很多程序员眼花缭乱【各种 XML、Annotation 配置等】,甚至很多时候发生错误也很难快速定位错误的地方。而在 SpringBoot 框架中,为我们提供了默认的配置,从而使开发人员不再需要定义样板化的配置,通过这种方式,SpringBoot 致力于在蓬勃发展的快速应用开发领域【Rapid Application Development】成为领导者。
SpringBoot 的特点
Spring 团队曾经为开发者提供了无数的便利,其提供的 IOC 和 AOP 两大特性一直为广大开发者所"深爱"。当然,Spring 框架还提供了很多优秀的特性,在这里就不一一介绍了。但是,在传统 Spring 框架中有一个重大的缺点,那就是在配置的时候很复杂,需要重复地进行一些配置。Spring 团队可能感受到了这一点,在 2014 年,Spring 团队发布了 SpringBoot 框架。另外,官网首页的 SpringBoot 部分也介绍了诸多 SpringBoot 的特点,如下所示:

快速构建项目
SpringBoot 具有多种快速构建项目的方式,如下面几种形式:
- 使用 Eclipse【MyEclipse】可以利用创建 Maven 项目的方式创建 SpringBoot 项目。当然,如果在 Eclipse 中安装了 Spring Tools,就可以直接创建 Spring Starter Project。
- 使用 IDEA,可以利用创建 Spring initializr 的方式创建 SpringBoot 项目。
- 使用 Spring Tool Suite,可以直接新建 Spring Starter Project 项目,过程类似 Eclipse 创建 SpringBoot 项目。
- 使用官方文档创建项目,在 Spring 官方文档上面提供了一种在线生成 SpringBoot 项目的方式,首先访问 Spring 官方快速构建地址【官网地址:https://start.spring.io/】,在这个页面上选择对应版本、构建工具等,填写完成后单击 Generate Project 按钮,即可在本地下载一个 SpringBoot 项目的压缩包。
当然,可能还有很多方式快速构建项目,这里就不一一介绍了。在这里推荐使用 IDEA 开发项目。
嵌入式 Web 容器
在传统 JavaWeb 项目中,当项目开发完成之后,还需要配置所需的 Web 容器【诸如 Tomcat 或者 WebLogic 之类的 Web 容器】。但是在 SpringBoot 搭建的项目中,内部提供了几种 Web 容器,如 Tomcat、Jetty 和 UnderTow。在 SpringBoot 1.x 中默认为 Tomcat;SpringBoot 2.x 中则分为两种情况,引入 spring-boot-starter-web 依赖为 Tomcat,引入 spring-boot-starter-webflux 依赖则为 Netty。当然,也支持使用之前指出的几种 Web 容器,开发者只需要根据场景选择适合的 starter 来获取一个默认配置好的容器即可,当启动成功后,应用一个默认端口为 8080 的 HTTP 服务。
易于构建任何应用
SpringBoot 提供了一个强大的 Starter 依赖机制,实质上 Spring 团队将 SpringBoot 框架整合了一切常用的 Maven 依赖,使 SpringBoot 想要整合对应依赖,就要将需要的依赖全部引入。比如,需要在项目中使用 Web,也就是我们常说的 SpringMVC,如果是原有的 Maven 项目,就需要引入很多依赖才能完成这个简单的需求。但是在 SpringBoot 项目中,我们只需要在 Maven 依赖中加入 spring-boot-starter-web 依赖即可,是不是很简单?这里再举一个例子,比如项目中需要使用 MySQL 数据库,这里只需要加入 MySQL 依赖,并且在配置文件中配置数据库信息就可以正常使用。
易于构建任何应用
SpringBoot 提供了一个强大的 Starter 依赖机制,实质上 Spring 团队将 SpringBoot 框架整合了一切常用的 Maven 依赖,使 SpringBoot 想要整合对应依赖,就要将需要的依赖全部引入。比如,需要在项目中使用 Web,也就是我们常说的 SpringMVC,如果是原有的 Maven 项目,就需要引入很多依赖才能完成这个简单的需求。但是在 SpringBoot 项目中,我们只需要在 Maven 依赖中加入 spring-boot-starter-web 依赖即可。这里再举一个例子,比如项目中需要使用 MySQL 数据库,这里只需要加入 MySQL 依赖,并且在配置文件中配置数据库信息就可以正常使用。
自动化配置
这个特点是上一个特点的延伸,在应用程序中引入依赖之后,其实还有一个强大之处在于 SpringBoot 应用会根据引入的依赖提供一些默认的配置供我们使用,如果需要修改,那么只需要在配置文件中修改对应的配置即可完成需求。这里还是以 SpringMVC 为例,传统 SpringMVC 项目需要配置对应的诸如 applicationContext.xml【Spring 配置文件】、applicationContext-mvc.xml【SpringMVC 配置文件】,而在 SpringBoot 中,这些需要的配置已经为我们默认配置了一套,不需要再进行配置了。比如,我们要加入 Web 应用程序根路径 test 的话,只需要在 application.properties【SpringBoot 应用程序默认配置文件】中加入 server.servlet.context-path=/test 即可。
开发者工具
在开发 Web 应用的时候,总会有一个困扰我们的问题,修改代码总是伴随不断重启项目,需要不断地断开 Web 容器,再重启来测试我们的代码。在 SpringBoot 应用中提供了开发者工具【spring-boot-devtools】,当我们重新编译类文件的时候,开发者工具会自动替我们重启应用,无须手动单击重启。
强大的应用监控
在生产环境中,应用的各项指标监控更是必不可少。在 SpringBoot 应用中提供了一个 spring-boot-starter-actuator【以下简称 SpringBoot Actuator】来供我们查看应用的各项指标,如 Health【健康检查】、Dump【活动线程】、Env【环境属性】、Metrics【内存,CPU 等】等指标,以监控我们的应用,同时可以配合使用 spring-boot-admin-starter-server【以下简称 SpringBoot Admin】监控我们的项目。SpringBoot Admin 可以在利用监控 SpringBoot Actuator 端点的同时监控所有微服务应用的健康状态,如果出现异常,就可以向维护人员发送邮件或者以其他方式给予告警。不只是这样,就连监控神器 Prometheus 也可以通过简单的配置接入 SpringBoot 应用程序中。
默认提供测试框架
SpringBoot 应用在创建项目之后会默认为我们创建测试类的文件,实质上就是引入 spring-boot-starter-test 依赖,然后可以通过它对各种场景进行测试,足够满足对项目的测试需求。
可执行 jar 部署
由于 SpringBoot 项目内嵌 Web 容器,因此提供了一种特殊部署方式,可以直接利用 Maven 或者 Gradle 对 SpringBoot 项目进行打包,生成一个 jar 文件,然后直接在具备环境的服务器或本地环境中利用 java -jar xx.jar 执行 jar 文件,使应用能够快速运行。
学习 SpringBoot 的目的
简化工作
SpringBoot 最大的优点是在一定程度上简化了我们的工作,大致分为以下几个角度对工作进行简化:
- 依赖简化:SpringBoot 自有的 starter 中提供了一些可以快捷使用的依赖,让整合或集成一些常用的功能更便捷。
- 配置简化:在配置方法中,如果没有特殊情况,SpringBoot 为我们提供了一些默认的配置,比如端口号默认为 8080 等。
- 部署简化:正如前面介绍的可执行 jar 部署,与传统服务的 Web 模式部署【打 war 包部署】相比,连安装 Web 容器的时间都节省了,不只是开发者,对运维人员也是福音。
- 监控简化:可以通过引用 SpringBoot 依赖的方式快捷提供监控端点,无代码侵入,十分便捷。
微服务时代
"微服务"一词最早是由 Martin Fowler 的《Microservices》一文【原文链接为 https://martinfowler.com/articles/microservices.html】提出的,其核心思想是将一个单体应用根据业务功能拆分成为多个服务,使业务代码之间不再耦合。接下来,我们介绍一下由单体应用转变为微服务应用的好处。
微服务的优势
- 服务解耦:将单体应用转变为多个服务,服务与服务之间通过 HTTP 协议或其他约定好的协议等进行网络通信。
- 技术选型广泛:微服务不需要局限于固定的技术栈,各个服务的开发团队可以根据场景自由选择开发技术,如 Java、PHP、NodeJS 等。
- 服务并行开发:可以多个团队分别开发不同的模块,每个团队负责一个或者几个服务,相互不受影响。
- 单一职责:不同服务的团队只需要关注自己团队的业务,无须经常为了熟悉业务而耽误时间。
- 独立部署:由于每个服务都是独立的项目,因此当服务开发完成后,可以直接独立部署。
- 敏捷开发:每个服务的业务迭代只需要更新对应服务的功能即可,支持快速迭代。
- 故障隔离:在传统单体项目中,如果某个功能发生故障,就可能导致整个服务发生宕机,但是在微服务中,一个服务发生宕机,其他服务仍然可以继续工作。
微服务的劣势
- 部署需要花费更多的精力:当服务拆分得非常多的时候,可能需要消耗更多的精力去运维管理这些应用。传统的单体应用下,运维人员只需要保证一个服务正常运行即可,但是拆分微服务后,可能需要保持几十,甚至上百、上千的服务高效运行,这对运维人员来说是一个很大的挑战。
- 服务间的接口问题:正因为拆分了微服务,服务与服务间使用接口进行相互调用,当一个接口需要改变格式或者增减数据时,所有调用这个接口的服务都需要做出相应的调整才能正确地使用。
- 高可用:拆分微服务后,可能有很多服务需要调用同一个服务或者接口,这个服务的可用性就需要让我们更加注意。
- 分布式事务:微服务系统各个服务间可能使用不同的数据库,比如搜索服务使用 ElasticSearch、基础服务使用 MySQL、评论服务使用 MongoDB,对于不同数据库间数据的一致性将是我们面临的重大挑战。
- 网络复杂性:由于各个服务间使用接口调用,因此系统间需要考虑很多网络延迟等客观因素来保证服务间的正常运转。
- 测试的复杂性:在测试方面,服务间的接口调用、服务间的测试需要一套整体的测试方案,自动化测试就显得必不可少。
由于 SpringBoot 项目可以提供快速开发、测试、部署,因此 SpringBoot 是微服务应用的不二选择。
社区背景强大
社区背景强大其实是 SpringBoot 如今盛行的原因。众所周知,Spring 家族对于开发者提供了无尽的便利,而作为 Spring 的亲儿子 SpringBoot 则继承了一切 Spring 的优点,并且规避了很多 Spring 框架臃肿的缺点,而后续 Spring 家族的分布式框架 SpringCloud 也是基于 SpringBoot 框架实现的框架,所以作为 Spring 的爱好者,或者将要学习 SpringCloud 框架的开发者,SpringBoot 是必须要学习的。
市场需求
在写这本书之前,笔者游历于各大国内、国外技术论坛,无论是在国内还是在国外,SpringBoot 的呼声都特别高,而且框架的更新频率特别快。如图是 2014 年到 2018 年 SpringBoot 的百度搜索指数:

从搜索指数可以看出,SpringBoot 的搜索值日趋增长,关注度特别高。另外,我们从互联网招聘网站上来看,已经有超过 7 成以上的公司将 SpringBoot 框架作为筛选人员的必要条件,所以无论是从个人提升,还是比较实际的跳槽、涨薪等,学习 SpringBoot 都会为你的技术栈增光添彩。
SpringBoot 的发展历史
Pivotal 团队对于 SpringBoot 更新得非常频繁,而且在 github 和国内社区的关注度都极高。接下来看一下 SpringBoot 的发展史。
发布里程碑
Phil Webb 在 Spring 官网博客上宣布了一个名为 SpringBoot 的新项目的第一个里程碑版本。【2013.8.6】
SpringBoot 1.0
SpringBoot 问世,为所有 Spring 开发提供快速和可广泛访问的入门体验,其中版本功能包括但不限于以下几点:
- 嵌入式服务器
- 外部配置
- 健康检查
- 安全性
- 快速运行
SpringBoot 1.1
第一次更新,下面列出比较重要的几点更新,详细版本内容可以查看 SpringBoot 的 github 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-1.1-Release-Notes。
- 对 spring-boot-starter-test 进行修改
- 新增对 ElasticSeach 和 Apache Solr 的自动配置支持
- 新增框架模板 FreeMarker、Groovy 和 Velocity
- spring-ws 适用于 Spring Web 服务支持
- 对 Jackson JSON 库进行了改进
- 添加了新的注解
SpringBoot 1.2
对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看 SpringBoot 的 GitHub 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-1.2-Release-Notes。
- 使用 Tomcat 8 和 Jetty 9 作为嵌入式 Servlet 容器,提供 Servlet 3.1 和增强的 WebSocket支持
- Spring 4.1
- 支持 JTA 实务
- 提供 JMS 支持
- 提供电子邮件支持
SpringBoot 1.3
对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看 SpringBoot 的 GitHub 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-1.3-Release-Notes。
- Spring 更新至 4.2
- Spring Security 更新至 4.0
- 新增 spring-boot-devtools【热部署】
- 新增 OAuth 2 的支持
- 缓存自动配置
SpringBoot 1.4
对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看 SpringBoot 的 GitHub 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-1.4-Release-Notes。
- Spring 更新至 4.3
- Hibernate 更新至 5.0
- 提供新的测试模块
- Neo4J 和 Narayana 事务管理器,Caffeine Cache、ElasticSearch Jest 支持
SpringBoot 1.5
对之前版本进行了修订,包括但不限于以下更新,详细版本内容可以查看 SpringBoot 的 GitHub 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-1.5-Release-Notes。
- 修改了一些 starter 的命名
- OAuth 2 资源过滤器
- 新的记录器端点
- 提供 Apache Kafka、LDAP 支持
SpringBoot 2.0
SpringBoot 2.x 版本对 SpringBoot 进行了重大的改进,官网介绍如图所示:

该版本对之前的版本进行了修订,包括但不限于以下更新,详细版本内容可以查看 SpringBoot 的 GitHub 官方版本介绍,地址为 https://github.com/Spring-projects/Spring-boot/wiki/Spring-Boot-2.0-Release-Notes。
- 基于 Java 8,支持 Java 9
- 支持 QuartZ 调度程序
- 大大简化了安全自动配置
- 支持嵌入式 Netty
- Tomcat、UnderTow 和 Jetty 均已支持 HTTP2
- 全新的执行器架构,支持 SpringMVC、WebFlux 和 Jersey
- 使用 Spring WebFlux / WebFlux.fn 提供响应式 Web 编程支持
- 为各种组件的响应式编程提供了自动化配置,如 Reactive SpringData、Reactive Spring Security等
- 用于响应式 Spring Data Cassandra、MongoDB、CouchBase 和 Redis 的自动化配置和启动器 pom
- 引入对 Kotlin 1.2.x 的支持,并提供了一个 runApplication 函数,让你通过惯用的 Kotlin 来运行 SpringBoot 应用程序。更多信息请参阅参考文档中对 Kotlin 的支持部分
- 启动时的图像 SpringBoot Banner 现已支持 Git