
## 一、Spring Boot 、 Spring MVC 、Spring對比
首先你需要明白一件事情:Spring Boot項目目的并不是替換Spring、SpringMVC,而是使他們用起來更加簡單。
**Spring 框架**
Spring框架最核心的特性就是依賴注入DI(Dependency Injecttion)和控制反轉IOC(Inversion Of Control)。如果你能夠合理的使用DI和IOC,可以開發出松耦合、擴展性好的的應用程序。

**Spring MVC**
Spring MVC提供了一種友好的方式來開發Web應用程序。 通過使用諸如Dispatcher Servlet,ModelAndView和View Resolver,可以輕松開發Web應用程序。
**Spring Boot**
Spring 和 Spring MVC最大的弊病在于存在大量的配置,并且這些配置在不同的項目中具有很高的相似性。從而導致重復配置,繁瑣而且雜亂!

Spring Boot期望通過結合自動配置和starters來解決了這個問題。 另外,Spring Boot還提供了一些功能,可以更快地構建可用于生產環境的應用程序。
## 二、Spring Boot 自動配置
Spring和Spring MVC應用程序里面有大量的XML或Java Bean配置。Spring Boot為解決這個問題,提供一種新的解決方案,新的思維方式。

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

## 四、什么是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

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使用代理作為跳板