![](https://cdn.zimug.com/wx-zimug.png)
## 一、Spring Boot 、 Spring MVC 、Spring对比
首先你需要明白一件事情:Spring Boot项目目的并不是替换Spring、SpringMVC,而是使他们用起来更加简单。
**Spring 框架**
Spring框架最核心的特性就是依赖注入DI(Dependency Injecttion)和控制反转IOC(Inversion Of Control)。如果你能够合理的使用DI和IOC,可以开发出松耦合、扩展性好的的应用程序。
![](https://img.kancloud.cn/c9/e7/c9e705add7da2caec95188ef6495352b_343x343.png)
**Spring MVC**
Spring MVC提供了一种友好的方式来开发Web应用程序。 通过使用诸如Dispatcher Servlet,ModelAndView和View Resolver,可以轻松开发Web应用程序。
**Spring Boot**
Spring 和 Spring MVC最大的弊病在于存在大量的配置,并且这些配置在不同的项目中具有很高的相似性。从而导致重复配置,繁琐而且杂乱!
![](https://img.kancloud.cn/d7/c1/d7c1c5ad4ff55fdd89aa119c470ae7c2_635x232.png)
Spring Boot期望通过结合自动配置和starters来解决了这个问题。 另外,Spring Boot还提供了一些功能,可以更快地构建可用于生产环境的应用程序。
## 二、Spring Boot 自动配置
Spring和Spring MVC应用程序里面有大量的XML或Java Bean配置。Spring Boot为解决这个问题,提供一种新的解决方案,新的思维方式。
![](https://img.kancloud.cn/e0/f3/e0f386d1c8916f4926946d42bf151337_956x578.png)
springboot思考的方式:是不是可以更加智能一点,当Spring中加入一些新的jar包,加入一些配置,可以自动的影响应用内的bean的加载。 比如:Spring MVC JAR位于类路径中时,自动配置Dispatcher Servlet。当然,当这些自动的默认配置不符合我们的要求的时候,我们可以修改。修改之前加载的这一些Bean,配置修改之后会自动加载另外一些Bean。
## 三、什么是Spring Boot Starter?
Spring Boot Starter是一组被依赖第三方类库的集合。
如果你要开发一个web应用程序,就通过包管理工具(如maven)引入spring-boot-starter-web就可以了,而不用分别引入下面这么多依赖类库,spring-boot-starter-web一次性帮你引入下面的这些常用类库。
* Spring — spring 核心, beans, context上下文, AOP面向切面
* Web MVC — Spring MVC
* Jackson — JSON数据的序列化与反序列化
* Validation — Hibernate参数校验及校验API
* 嵌入式 Servlet Container — Tomcat
* 日志框架Logging — logback, slf4j
![](https://img.kancloud.cn/17/c6/17c6abe1c379cb541484b6844e6b4093_603x545.png)
## 四、什么是Spring Boot Starter Parent
所有的Spring Boot项目默认使用spring-boot-starter-parent作为应用程序的父项目。
~~~
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
~~~
继承父项目的好处在于: 统一java版本配置和其他的一些依赖类库的版本。也就是说,你引入的第三方类库不要加版本号,父项目替你管理版本,而且是经过兼容性测试的。比你自己随便引入一个版本兼容性更好。
> 当然父项目只能帮你管理一些常用类库的版本,如果你引入一些不常用的jar,还是要自己管理版本号及兼容性!
## 五、嵌入式web容器
Spring boot打成jar包,默认包含嵌入式的web容器:tomcat。你可以简单的使用如下命令启动一个web服务:
~~~
java -jar springboot-demo.jar
~~~
这更有利于微服务的部署及微服务的构建、启动、扩容。Spring Boot还支持Jetty和Undertow作为web容器。
## 六、Spring Data
![](https://img.kancloud.cn/71/5b/715bd18bdaf7ca530da4857c8da14881_591x305.png)
Spring Data的目标是提供一种更友好的方式或者是API来存取数据。包括对于关系型数据库和NOSQL数据的支持。比如:
* Spring Data JPA — 关系型数据库操作的API,友好且易于使用
* Spring Data MongoDB -MongoDB的操作API
* Spring Data REST — 从持久层Repositories自动生成服务层API,暴露 REST APIs 接口。超级好用!
当然,Spring Data还有更多好用的特性和支持等待你去探索!
## 七、spring boot2.x新特性
### 7.1.基础环境升级
* 最低 JDK 8,支持 JDK 9,不再支持 Java 6 和 7。Spring Boot 2.0 要求 Java 8 作为最低版本,许多现有的 API 已更新,以利用 Java 8 的特性。
例如,接口上的默认方法,函数回调以及新的 API,如 javax.time。
* 如果你正在使用 Java 7 或更早版本,则在开发 Spring Boot 2.0 应用程序之前,需要升级你的 JDK。
### 7.2.依赖组件升级
* Jetty 9.4,Jetty 是一个开源的 Servlet 容器,它为基于 Java 的 Web 内容,例如 JSP 和 Servlet 提供运行环境。Jetty 是使用 Java 语言编写的,它的 API 以一组 JAR 包的形式发布。
* Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全支持 Java 9。
* Flyway 5,Flyway 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway 可以像 SVN 管理不同人的代码那样,管理不同人的 SQL 脚本,从而做到数据库同步。
* Hibernate 5.2,Hibernate 是一款非常流行的 ORM 框架。
* Gradle 3.4,Spring Boot 的 Gradle 插件在很大程度上已被重写,有了重大的改进。
* Thymeleaf 3.0,Thymeleaf 3 相对于 Thymeleaf 2 有非常大的性能提升。
### 7.3. 默认软件替换
* 默认数据库连接池已从 Tomcat 切换到 HikariCP,HikariCP 是一个高性能的 JDBC 连接池,Hikari 是日语“光”的意思。
* redis客户端默认使用 Lettuce,替换掉Jedis.Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步、异步和反应使用。多个线程可以共享同一个 RedisConnection,它利用优秀 Netty NIO 框架来高效地管理多个连接,支持先进的 Redis 功能,如 Sentinel、集群、流水线、自动重新连接和 Redis 数据模型。
### 7.4.新技术的引入
* 响应式编程WebFlux,重要的变革,后续章节会详细展示
* 支持 Quartz,Spring Boot 1.0 并没有提供对 Quartz 的支持,之前出现了各种集成方案,Spring Boot 2.0 给出了最简单的集成方式。
* 对Kotlin 的支持
* JOOQ 的支持,JOOQ 是基于 Java 访问关系型数据库的工具包。JOOQ 既吸取了传统 ORM 操作数据的简单性和安全性,又保留了原生 SQL 的灵活性,它更像是介于 ORMS 和 JDBC 的中间层。
### 7.5.彩蛋
在 Spring Boot 1.0 项目中 src/main/resources 路径下新建一个 banner.txt 文件,文件中写入一些字符,启动项目时就会发现默认的 Banner 被替换了,到了 Spring Boot 2.0 现在可以支持 Gif 文件的打印,Spring Boot 2.0 在项目启动的时候,会将 Gif 图片的每一个画面,按照顺序打印在日志中,所有的画面打印完毕后,才会启动 Spring Boot 项目。
- 核心内容介绍
- 问题Q&A汇总
- 本文档已达38万字
- 联系作者-代码工具获取
- 作者的其他作品推荐
- vue深入浅出系列
- Spring Security-JWT-OAuth2一本通
- 实战前后端分离RBAC权限管理系统
- 实战SpringCloud微服务从青铜到王者
- 第一章 spring boot 2.x基础及概念入门
- 1.1.spring boot 产生的背景及其优势
- 1.2.helloworld及项目结构介绍
- 1.3.需要先了解的核心概念
- 1.4.提高开发效率必备工具lombok
- 1.5.IDEA环境下的热加载与热部署
- 1.6.开发过程中常用IDEA插件
- 第二章 RESTful接口实现与测试
- 2.1.RESTful接口与http协议状态表述
- 2.2.1.Spring常用注解及基础讲解
- 2.2.2.常用注解开发一个RESTful接口
- 2.2.3.配合前端axios传参总结
- 2.3.1 JSON数据处理与PostMan测试
- 2.3.2. Jackson全局配置
- 2.4.使用Mockito编码完成接口测试
- 2.5. 使用Swagger2构建API文档
- 2.6.接口文档多种格式导出离线阅读
- 2.7.Swagger3-即OpenAPI使用
- 第三章 spring boot 配置管理
- 3.1.结合源码讲解bean自动装配原理
- 3.2.详解YAML语法及占位符语法
- 3.3.YAML配置绑定变量两种方式
- 3.4.配置属性值数据绑定校验
- 3.5.加载额外配置文件的两种方式
- 3.6.使用SpEL表达式绑定配置项
- 3.7.profile不同环境使用不同配置
- 3.8.配置及配置文件的加载优先级
- 3.9.配置文件敏感字段加密
- 第四章 整合数据库开发框架
- 4.1.整合Spring JDBC操作数据
- 4.2 Spring JDBC多数据源的实现
- 4.3.Spring JDBC JTA实现分布式事务
- 4.4.主流ORM持久层框架选型
- 4.5.java bean的赋值转换
- 4.6.整合Spring Data JPA操作数据
- 4.6.1.SpringDataJPA实现分页排序
- 4.7.Spring data JPA的多数据源实现
- 4.8.JPA+atomikos实现分布式事务
- 4.9.1.整合MybatisGenerator操作数据
- 4.9.2.整合mybatisPlus操作数据库
- 4.10.Mybatis开发最佳实践总结
- 4.11.Spring mybatis的多数据源实现
- 4.12.1.mybatis+atomikos实现分布式事务
- 4.12.2.mybatisplus+atomikos实现分布式事务
- 4.13.Spring事务与分布式事务
- 4.14.一行代码实现RESTFul接口
- 4.15.一键生成数据库文档
- 第五章 整合静态资源与模板引擎
- 5.1.1.webjars与静态资源
- 5.1.2.访问jar内部静态资源
- 5.2.模板引擎选型与未来趋势
- 5.3.web应用开发之整合jsp
- 5.4.web应用开发之整合freemarker
- 5.5.web应用开发之整合thymeleaf
- 5.6.thymeleaf基础语法讲解
- 5.7.thymeleaf内置对象与工具类
- 5.8.公共片段(标签)与内联js
- 第六章 生命周期内的拦截过滤与监听
- 6.1.Servlet域对象与属性变化监听
- 6.2.Servlet过滤器的实现
- 6.3.spring拦截器及请求链路说明
- 6.4.自定义事件的发布与监听
- 6.5.应用启动的监听
- 6.6.类初始化监听
- 第七章 嵌入式容器的配置与应用
- 7.1.嵌入式容器的运行参数配置
- 7.2.为Web容器配置HTTPS
- 7.3.切换到jetty&undertow容器
- 7.4.打war包部署到外置tomcat容器
- 第八章 统一全局异常处理
- 8.1.设计一个优秀的异常处理机制
- 8.2.自定义异常和相关数据结构
- 8.3.通用全局异常处理逻辑
- 8.4.服务端数据校验异常处理逻辑
- 8.5.AOP完美处理页面跳转异常
- 第九章 日志框架与全局日志管理
- 9.1.日志框架的体系结构
- 9.2.logback日志框架配置
- 9.3.1.log4j2日志框架整合与使用
- 9.3.2.log4j2异步日志配置
- 9.4.拦截器实现统一访问日志
- 第十章 异步任务与定时任务
- 10.1.实现Async异步任务
- 10.2.为异步任务规划线程池
- 10.3.通过@Scheduled实现定时任务
- 10.4.quartz简单定时任务(内存持久化)
- 10.5.quartz动态定时任务(数据库持久化)
- 10.6.可观测异步任务线程池
- 第十一章 redis缓存与session共享
- 11.1.使用docker安装redis
- 11.2.redis数据结构与应用场景
- 11.3.单例哨兵及集群模式整合
- 11.4.使用redisTemplate操作数据
- 11.5.使用Redis Repository操作数据
- 11.6.spring cache缓存基本用法
- 11.7.1.详述缓存声明式注解的使用
- 11.7.2.EhCache缓存
- 11.8.缓存雪崩穿透等解决方案
- 11.9.集群多节点应用session共享
- 11.10.介绍redis分布式锁
- 11.11.RedisLockRegistry分布式锁
- 11.12.使用redisson实现分布式锁
- 第十二章 整合分布式文件系统
- 12.1.文件本地上传与提供访问服务
- 12.2.MinIO简介与选型介绍
- 12.3.MinIO的安装与基础用法
- 12.4.整合MinIO的JavaSDK
- 12.5.fastdfs简介及架构说明
- 12.6.使用docker安装fastdfs
- 12.7.开发一个自定义fastdfs-starter
- 12.8.整合fastdfs操作文件数据
- 第十三章 服务器推送技术
- 13.1.主流服务器推送技术说明
- 13.2.服务端推送事件SSE
- 13.3.双向实时通信websocket
- 第十四章 邮件发送的整合与使用
- 14.1.基础协议及邮件配置整合
- 14.2.发送html和基于模板的邮件
- 14.3.发送带附件和内联附件邮件
- 第十五章 应用程序监控管理
- 15.1.Actuator应用监控快速入门
- 15.2.Actuator服务保护缓存及跨域
- 15.3.SpringBootAdmin界面化监控
- 第十六章 消息队列的整合与使用
- 16.1.消息队列与JMS规范简介
- 16.2.使用docker安装activeMQ
- 16.3.activeMQ实现点对点队列
- 16.4.activeMQ实现发布订阅队列
- 16.5.docker安装RocketMQ
- 16.6.RocketMQ实现2种消费模式
- WebFlux文档迁移的说明
- 番外篇:周边技术生态
- centos7安装docker图文详解
- docker安装mongodb(单点)图文详解
- 整合Spring data mongodb操作数据
- windows下如何安装git
- springboot非web项目构建
- 多种方式shutdown应用服务
- SpringBoot-2.2版本的变化
- SpringBoot中如何使用Cookies
- 使用flyway管理数据库版本
- SpringBoot解决跨域访问的问题
- IDEA远程调试linux上的SB项目
- 附录一:mybatis-plus
- f1-1.CURD快速入门
- f1-2.条件构造器使用与总结
- f1-3.自定义SQL
- f1-4.表格分页与下拉分页查询
- f1-5.ActiveRecord模式
- f1-6.主键生成策略
- f1-7.MybatisPlus代码生成器
- f1-8.逻辑删除
- f1-9.字段自动填充
- f1-10.多租户解决方案
- f1-11 日志打印输出
- 附录二:RestTemplate
- f2-1.基本介绍及配置使用
- f2-2.底层HTTP客户端库的切换
- f2-3.GET请求使用详解
- f2-4.POST请求使用详解
- f2-5.HTTP method使用方法详解
- f2-6.文件上传与下载
- f2-7.请求失败异常处理
- f2-8.自动重试机制
- f2-9.通过BasicAuth认证
- f2-10使用代理作为跳板