前言:
當(dāng)前互聯(lián)網(wǎng)后端開發(fā)中查蓉,JavaEE占據(jù)了主導(dǎo)地位毒涧。對JavaEE開發(fā)魂拦,首選框架是Spring框架苏携。在傳統(tǒng)的Spring開發(fā)中做瞪,需要使用大量的與業(yè)務(wù)無關(guān)的XML配置才能使Spring框架運行起來,這點備受許多開發(fā)者詬病右冻。
隨著Spring4.x發(fā)布装蓬,Spring已經(jīng)完全脫離XML,只使用注解就可以運行項目纱扭。為了進(jìn)一步簡化Spring應(yīng)用的開發(fā)牍帚,SpringBoot誕生了。它是由Pivotal團(tuán)隊提供的全新框架乳蛾,其設(shè)計目的是簡化Spring應(yīng)用的搭建及開發(fā)過程暗赶,并迎合時下流行的分布式微服務(wù)設(shè)計思想鄙币,越來越多企業(yè)在使用SpringBoot。
本文重點:
1.講解SpringBoot的設(shè)計初衷
2.講解SpringBoot的開發(fā)環(huán)境要求
3.搭建SpringBoot的入門開發(fā)工程
4.講解SpringBoot的配置文件常見配置
5.使用SpringBoot整合MyBatis
6.使用SpringBoot整合Redis進(jìn)行簡單的數(shù)據(jù)緩存
7.使用SpringBoot發(fā)送Http請求
8.使用SpringBoot進(jìn)行簡單代碼測試
9.打包部署SpringBoot項目
一蹂随、SpringBoot簡介
1.設(shè)計初衷
springboot為Spring開發(fā)者提供一種十嘿,更快速、體驗更好的Spring應(yīng)用開發(fā)方式岳锁。開箱即用绩衷,同時也可快速擴(kuò)展,嵌入式的Tomcat激率。絕對沒有冗余代碼唇聘,無需XML配置。
單純看這句話或許你還沒有感覺柱搜,但如果你做過springmvc的項目開發(fā)迟郎,tomcat和xml文件你肯定不會陌生。那上面說的內(nèi)置的tomcat和沒有xml配置又是什么聪蘸?咱們接著往下學(xué)習(xí),很快你就能get到了宪肖。
2.核心功能
核心能力:Spring容器、日志健爬、自動配置AutoCong?guration桐早、Starters web應(yīng)用的能力:MVC、嵌入式容器鹃答。
數(shù)據(jù)訪問(持久化):關(guān)系型數(shù)據(jù)庫礁蔗、非關(guān)系型數(shù)據(jù)庫強(qiáng)大的整合其他技術(shù)的能力
測試:強(qiáng)悍的應(yīng)用測試。
3.開發(fā)環(huán)境要求
本文及后續(xù)文章主要基于Spring Boot 的2.1.7.RELEASES正式發(fā)行版设拟。
Java版本:Java8或Java 11慨仿;
Spring版本:5.1.8及以上;
構(gòu)建工具版本:Maven 3.3及以上纳胧;
Servlet容器版本:SpringBoot 支持如下的嵌入式Servlet容器镰吆,Spring Boot應(yīng)用程序最低支持到Servlet 3.1的容器。
當(dāng)然我們一般使用的都是tomcat跑慕。
4.Spring怎么做Web開發(fā)万皿?
回想一下,在使用springmvc時我們怎么開發(fā)一個web項目:
web.xml配置:SpringMVC核心控制器(DispatchServlet)核行,Spring容器監(jiān)聽器牢硅,編碼過濾器....
Spring 配置:包掃描(service、dao)芝雪,配置數(shù)據(jù)源减余,配置事務(wù)....
SpringMVC配置:包掃描(controller),視圖解析器绵脯,注解驅(qū)動佳励,攔截器休里,靜態(tài)資源....
日志配置...
編寫少量業(yè)務(wù)代碼
部署Tomcat 調(diào)試,每次測試都需要部署
這樣總結(jié)起來赃承,是不是很形象妙黍,很有感覺?但是如果用Spring Boot 瞧剖,一切就將變得超簡單拭嫁。
下面我們就來體驗,無需xml配置Wビ凇做粤!無感Tomcat!超迅速搭建功能強(qiáng)大的整套Web捉撮!的入門案例吧怕品。
二、SpringBoot快速入門
1.Maven搭建SpringBoot工程
如果還不知道Maven巾遭,可以參見我的其它專題文章《Maven入門》和《Maven高級》肉康。
案例目標(biāo):
Maven搭建SpringBoot工程,實現(xiàn)web的請求響應(yīng)灼舍,最終在瀏覽器訪問在頁面中輸出helloworld 吼和。
實現(xiàn)步驟:
創(chuàng)建Maven工程
pom.xml文件中配置起步依賴
編寫SpringBoot啟動引導(dǎo)類
編寫Controller
訪問測試
實現(xiàn)過程:
- 創(chuàng)建Maven工程:day01_springboot_helloworld
至此,一個簡單的基于maven的springboot工程框架就出來了骑素。左側(cè)的工程目錄結(jié)構(gòu)應(yīng)該都比較熟悉了吧炫乓。咱們繼續(xù)配置項目...
- pom.xml文件中配置父坐標(biāo)和web的起步依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--繼承SpringBoot父POM文件-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
</parent>
<groupId>abc.java</groupId>
<artifactId>day01_springboot_helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--web開發(fā)依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
-
編寫SpringBoot引導(dǎo)類
自己補(bǔ)全目錄結(jié)構(gòu)。
在這里插入圖片描述
package abc.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName HelloWorldApplication
* @Version 1.0
**/
@Configuration //聲明是個配置類
@EnableAutoConfiguration //開啟自動配置
@ComponentScan //開啟包掃描
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
}
- 編寫三層架構(gòu)代碼:
這里我們只編寫Controller献丑,自己補(bǔ)全目錄結(jié)構(gòu)末捣。
package abc.java.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @ClassName HelloWorldController
* @Version 1.0
**/
@Controller
@RequestMapping("/day01")
public class HelloWorldController {
@RequestMapping("/hello")
@ResponseBody
public String demo(){
return "Hello World!";
}
}
-
配置項目
在這里插入圖片描述
也可以在這個位置上的Edit Configurations添加啟動配置。稍微復(fù)雜一些阳距,需要自己去找啟動類塔粒。
在這里插入圖片描述
在這里插入圖片描述 - 訪問http://localhost:8080/day01/hello測試
點擊run或者debug啟動項目
在這里插入圖片描述
訪問
在這里插入圖片描述
能手敲出來就算入門了结借。
需要說明一下:
- pom需要什么依賴導(dǎo)入什么依賴即可筐摘。
- 啟動引導(dǎo)類更簡單,就是固定寫法船老,不可能記不住咖熟。引導(dǎo)類是SprignBoot項目的入口,相當(dāng)于類里面的main方法柳畔。
- controller就更不用說了馍管,和mvc一樣的,可能就是那幾個注解可能不認(rèn)識薪韩。沒關(guān)系确沸,這才是入門案例而已捌锭。
2.使用IDEA快速創(chuàng)建SpringBoot項目
剛才我們是使用的以往創(chuàng)建mvc項目的方法一步一步去完善項目結(jié)構(gòu),寫出的springboot項目罗捎,但是在IDEA中提供了更為快捷的方式观谦。
下面我們就開始在IDEA軟件上,使用Spring Initializr方式創(chuàng)建SpringBoot工程桨菜,然后再一次實現(xiàn)入門案例的代碼豁状。但具體代碼就不再提供了,因為都一樣倒得。只是創(chuàng)建過程更便捷泻红。
實現(xiàn)步驟:
使用Spring Initializr創(chuàng)建SpringBoot
配置項目信息
勾選起步依賴
配置文件存儲路徑地址
再次編寫入門案例三層架構(gòu)代碼
實現(xiàn)過程:
- 使用Spring Initializr創(chuàng)建SpringBoot工程
先說明一下,使用這種方式是需要聯(lián)網(wǎng)的霞掺,如果你網(wǎng)絡(luò)不好可能會需要多等待一會兒谊路。如果等的太久,還是像入門案例那樣菩彬,自己手動建maven項目吧凶异。
-
配置項目信息
在這里插入圖片描述
圖片中尤其需要注意的是,啟動引導(dǎo)類的位置必須和三層的目錄在同一級別挤巡,而不是和三層里面的類一個級別剩彬。
-
勾選起步依賴
這里勾選了兩個起步依賴。
在這里插入圖片描述 - 配置文件存儲路徑地址
是不是很眼熟...一般不需要修改矿卑。
在這里插入圖片描述
項目剛創(chuàng)建好之后喉恋,會進(jìn)入很熟悉的界面,但是不要著急操作母廷,下面的紅框看一下轻黑,還在加載東西,剛才勾選的依賴都在導(dǎo)入琴昆,免得著急操作搞崩了氓鄙。經(jīng)驗之談...
在這里插入圖片描述
如果你能看到這個DashBoard的提示,就展開它业舍,選則開啟DashBoard抖拦。如果沒有也沒關(guān)系,項目一樣可以運行舷暮。
當(dāng)然态罪,也有辦法能手動打開.參考著https://blog.csdn.net/m18633778874/article/details/82687389自己打開就行。有它會讓你的操作方便很多下面,可能現(xiàn)在體會不出來复颈,回頭做微服務(wù)的時候,一個工程下面幾十個springboot項目沥割,如果沒有它可能會比較繁瑣一些耗啦。
在這里插入圖片描述
創(chuàng)建好之后的項目結(jié)構(gòu)如下:
把把標(biāo)注的幾個目錄結(jié)構(gòu)刪除就行凿菩,用不到。
最后帜讲,你就會看到和我們之前手動創(chuàng)建的項目結(jié)構(gòu)是一模一樣的蓄髓。
看一下自動創(chuàng)建的pom.xml文件。
截圖沒截全舒帮,下面還有個maven插件会喝。畢竟是maven項目,一般不用玩郊。
再來看一看自動創(chuàng)建的啟動引導(dǎo)類肢执。目錄結(jié)構(gòu)是不是和我們改完之后的一樣?main方法里面的代碼是不是也一樣译红?
一般情況下预茄,我們肯定是只寫簡單的1個了。沒辦法侦厚,程序員都懶...
不同點在于注解:我們寫了3個耻陕,他寫了1個。為什么呢刨沦?
**@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan **
為什么這么說呢诗宣?點進(jìn)@SpringBootApplication這個注解類看一下就知道了。
在這里插入圖片描述
沒看到@Configuration想诅?再點進(jìn)SpringBootConfiguration看召庞,原來它是被Configuration給標(biāo)記的,本身也是個用來標(biāo)識配置的注解来破。所以傳承先來不難理解了吧篮灼?
在這里插入圖片描述
再往后就是編寫入門案例三層架構(gòu)代碼,訪問http://localhost:8080/hello接口測試徘禁,我們就不再重復(fù)寫代碼了诅诱。
3. 官網(wǎng)聯(lián)網(wǎng)創(chuàng)建springboot項目
-
進(jìn)入官網(wǎng):https://start.spring.io/
在這里插入圖片描述 -
選擇依賴
在這里插入圖片描述 -
生成項目文件,壓縮包送朱,解壓到指定目錄
在這里插入圖片描述 -
從IDEA中導(dǎo)入解壓好的項目
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述 -
調(diào)整項目目錄結(jié)構(gòu)
在這里插入圖片描述
以上就是創(chuàng)建springboot項目的3中方式娘荡。后兩種需要用網(wǎng)絡(luò),酌情使用即可骤菠。
提示:
用第一種方式或者偶爾不記得依賴maven坐標(biāo)的時候它改,可以去maven倉庫去查一下,找到合適的版本的地址,復(fù)制過來粘到pom文件里即可商乎。
在這里插入圖片描述
4. SpringBoot工程熱部署
首先說,為什么需要熱部署祭阀。沒有熱部署鹉戚,每次修改代碼后都需要重新部署項目鲜戒,如果代碼量比較多,修改次數(shù)比較多抹凳,反復(fù)操作比較繁瑣遏餐。
實現(xiàn)熱部署步驟
- 導(dǎo)入熱部署依賴坐標(biāo)
<!--spring-boot開發(fā)工具jar包,支持熱部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
-
開啟IDEA自動編譯支持
默認(rèn)情況IDEA不會自動編譯赢底,需要設(shè)置Build Project Automatically失都。打上勾即可。需要說明幸冻,這個自動編譯是每個項目都有各自的自動編譯設(shè)置粹庞,不同項目都需要分別設(shè)置。
在這里插入圖片描述 -
修改注冊表
同時按下“ ctrl + shift + alt + / ” 組合鍵洽损,會彈出Maintenance維護(hù)菜單庞溜,選擇Registry(注冊表)。需要說明的是碑定,這個和自動編譯不一樣流码,改一次,以后就都生效了延刘。
進(jìn)去后漫试,找到“允許運行期間啟用自動編譯”,看下圖的英文哈碘赖,我懶得敲英文了商虐。打上勾,close就行了崖疤。
在這里插入圖片描述
如果按照以上操作后秘车,修改項目代碼時,發(fā)現(xiàn)沒有自動部署劫哼,重啟IDEA叮趴。
如果還不行,那就不行吧权烧,無所謂的眯亦,因為本來也是時靈時不靈...手動“錘”一下來的更實際,絕對不會不成功般码。
在這里插入圖片描述
三妻率、SpringBoot原理分析
1.starters的原理
starters是依賴關(guān)系的整理和封裝,是一系列關(guān)聯(lián)依賴坐標(biāo)的整合板祝。
每個Starter包含了當(dāng)前功能下的許多必備依賴坐標(biāo)宫静,這些依賴坐標(biāo)是項目開發(fā)、上線和運行必須的,同時這些依賴也支持依賴傳遞孤里。它可以讓導(dǎo)入應(yīng)用開發(fā)的依賴坐標(biāo)更方便伏伯。舉例:spring-boot-starter-web 包含了所有web開發(fā)必須的依賴坐標(biāo)。
不理解捌袜?沒關(guān)系说搅,看圖說話。
我們從maven的依賴結(jié)構(gòu)或者點進(jìn)starter-web去看虏等,都可以看出starter里面其實封裝了很多的依賴弄唧,他們共同組成了這個starter,所以有了這個starter就相當(dāng)于有了開發(fā)web項目所必須的全部依賴霍衫,而不需要像以前一樣候引,把下圖中左側(cè)的零散的依賴挨個復(fù)制粘貼一遍,因為已經(jīng)合而為一了慕淡。
這也是"Write Less Do More"的一個真實寫照背伴。
在這里插入圖片描述
starter的命名規(guī)范:官方的starter寫法"spring-boot-starter-xxx" ,非官方的starter寫法“第三方項目名-springboot-starter”
常用的starters可以自己查看一下官方文檔峰髓∩导牛總之,非常多携兵。
2. 依賴管理(Dependency Management)
- 繼承了spring-boot-starter-parent 的好處和特點
- 默認(rèn)編譯Java 1.8
-
默認(rèn)編碼UTF-8
為什么這么說疾掰?看spring-boot-starter-parent 的properties標(biāo)簽。
在這里插入圖片描述 -
通過spring-boot-denpendencies的pom管理所有公共Starter依賴的版本徐紧。
為什么這么說静檬?我們再去點spring-boot-starter-parent看它的父級spring-boot-dependencies。我們發(fā)現(xiàn)并级,其實所有的依賴其實是在spring-boot-dependenciymanagement里面配置的拂檩。
在這里插入圖片描述
所有的版本也都已經(jīng)再這里限定了。
在這里插入圖片描述
dependencymanagement和dependencies 標(biāo)簽的區(qū)別:父類放在dependencymanagement中的依賴嘲碧,子類繼承后并不會直接顯現(xiàn)稻励,而是可以從里面隨用隨取地導(dǎo)入依賴使用,不顯式地聲明使用愈涩,就不會生效望抽;
而dependencies里面的starter,不管用不用履婉,寫在父類里煤篙,子類直接繼承并生效。
- POM文件中的Maven插件
<毁腿!-- 作用:可以將一個SpringBoot的工程打包成為可執(zhí)行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果想使用父pom文件中的任何插件辑奈,無需配置即可直接使用苛茂。
3.自動配置
SpringBoot采用約定大于配置設(shè)計思想,將所有可能遇到的配置信息提前配置好身害,寫在自動配置的jar
包中味悄。每個Starter基本都會有對應(yīng)的自動配置草戈。
自動配置的值在哪里塌鸯?
查看啟動類注解@SpringBootApplication
追蹤步驟:
1.@EnableAutoCon?guration
2.@Import({AutoCon?gurationImportSelector.class})
3.spring.factories
4.org.springframework.boot.autocon?gure.web.servlet.ServletWebServerFactoryAutoCon?gur ation
5.@EnableCon?gurationProperties({ServerProperties.class})
6.private ?nal ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
知道有自動配置就行了,沒必要深究唐片。實用意義不大丙猬。