Java成長之路(一)--SpringBoot基礎(chǔ)學(xué)習(xí)--3種項目創(chuàng)建及熱部署

前言:

當(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)用測試。

image.png

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跑慕。

image

4.Spring怎么做Web開發(fā)万皿?

回想一下,在使用springmvc時我們怎么開發(fā)一個web項目:

  1. web.xml配置:SpringMVC核心控制器(DispatchServlet)核行,Spring容器監(jiān)聽器牢硅,編碼過濾器....

  2. Spring 配置:包掃描(service、dao)芝雪,配置數(shù)據(jù)源减余,配置事務(wù)....

  3. SpringMVC配置:包掃描(controller),視圖解析器绵脯,注解驅(qū)動佳励,攔截器休里,靜態(tài)資源....

  4. 日志配置...

  5. 編寫少量業(yè)務(wù)代碼

  6. 部署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)步驟:

  1. 創(chuàng)建Maven工程

  2. pom.xml文件中配置起步依賴

  3. 編寫SpringBoot啟動引導(dǎo)類

  4. 編寫Controller

  5. 訪問測試

實現(xiàn)過程:

  1. 創(chuàng)建Maven工程:day01_springboot_helloworld
image
image
image
image

至此,一個簡單的基于maven的springboot工程框架就出來了骑素。左側(cè)的工程目錄結(jié)構(gòu)應(yīng)該都比較熟悉了吧炫乓。咱們繼續(xù)配置項目...

  1. 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>
  1. 編寫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);
    }
}

  1. 編寫三層架構(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!";
    }
}

  1. 配置項目


    在這里插入圖片描述

    也可以在這個位置上的Edit Configurations添加啟動配置。稍微復(fù)雜一些阳距,需要自己去找啟動類塔粒。


    在這里插入圖片描述

    在這里插入圖片描述
  2. 訪問http://localhost:8080/day01/hello測試
    點擊run或者debug啟動項目
    在這里插入圖片描述

    訪問
    在這里插入圖片描述

能手敲出來就算入門了结借。
需要說明一下:

  1. pom需要什么依賴導(dǎo)入什么依賴即可筐摘。
  2. 啟動引導(dǎo)類更簡單,就是固定寫法船老,不可能記不住咖熟。引導(dǎo)類是SprignBoot項目的入口,相當(dāng)于類里面的main方法柳畔。
  3. 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)步驟:

  1. 使用Spring Initializr創(chuàng)建SpringBoot

  2. 配置項目信息

  3. 勾選起步依賴

  4. 配置文件存儲路徑地址

  5. 再次編寫入門案例三層架構(gòu)代碼

  6. 訪問http://localhost:8080/hello接口測試

實現(xiàn)過程:

  1. 使用Spring Initializr創(chuàng)建SpringBoot工程

先說明一下,使用這種方式是需要聯(lián)網(wǎng)的霞掺,如果你網(wǎng)絡(luò)不好可能會需要多等待一會兒谊路。如果等的太久,還是像入門案例那樣菩彬,自己手動建maven項目吧凶异。

在這里插入圖片描述
  1. 配置項目信息


    在這里插入圖片描述

圖片中尤其需要注意的是,啟動引導(dǎo)類的位置必須和三層的目錄在同一級別挤巡,而不是和三層里面的類一個級別剩彬。

  1. 勾選起步依賴
    這里勾選了兩個起步依賴。


    在這里插入圖片描述
  2. 配置文件存儲路徑地址
    是不是很眼熟...一般不需要修改矿卑。
    在這里插入圖片描述

    項目剛創(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項目

  1. 進(jìn)入官網(wǎng):https://start.spring.io/

    在這里插入圖片描述

  2. 選擇依賴


    在這里插入圖片描述
  3. 生成項目文件,壓縮包送朱,解壓到指定目錄


    在這里插入圖片描述
  4. 從IDEA中導(dǎo)入解壓好的項目


    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述
  5. 調(diào)整項目目錄結(jié)構(gòu)


    在這里插入圖片描述

以上就是創(chuàng)建springboot項目的3中方式娘荡。后兩種需要用網(wǎng)絡(luò),酌情使用即可骤菠。

提示:

用第一種方式或者偶爾不記得依賴maven坐標(biāo)的時候它改,可以去maven倉庫去查一下,找到合適的版本的地址,復(fù)制過來粘到pom文件里即可商乎。

在這里插入圖片描述

4. SpringBoot工程熱部署

首先說,為什么需要熱部署祭阀。沒有熱部署鹉戚,每次修改代碼后都需要重新部署項目鲜戒,如果代碼量比較多,修改次數(shù)比較多抹凳,反復(fù)操作比較繁瑣遏餐。

實現(xiàn)熱部署步驟

  1. 導(dǎo)入熱部署依賴坐標(biāo)
<!--spring-boot開發(fā)工具jar包,支持熱部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
  1. 開啟IDEA自動編譯支持
    默認(rèn)情況IDEA不會自動編譯赢底,需要設(shè)置Build Project Automatically失都。打上勾即可。需要說明幸冻,這個自動編譯是每個項目都有各自的自動編譯設(shè)置粹庞,不同項目都需要分別設(shè)置。
    在這里插入圖片描述
  2. 修改注冊表
    同時按下“ 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)

  1. 繼承了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,不管用不用履婉,寫在父類里煤篙,子類直接繼承并生效。

  1. 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();
在這里插入圖片描述

在這里插入圖片描述

知道有自動配置就行了,沒必要深究唐片。實用意義不大丙猬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市费韭,隨后出現(xiàn)的幾起案子茧球,更是在濱河造成了極大的恐慌,老刑警劉巖星持,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抢埋,死亡現(xiàn)場離奇詭異,居然都是意外死亡督暂,警方通過查閱死者的電腦和手機(jī)揪垄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逻翁,“玉大人饥努,你說我怎么就攤上這事“嘶兀” “怎么了酷愧?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缠诅。 經(jīng)常有香客問我溶浴,道長,這世上最難降的妖魔是什么管引? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任士败,我火速辦了婚禮,結(jié)果婚禮上汉匙,老公的妹妹穿的比我還像新娘拱烁。我一直安慰自己,他們只是感情好噩翠,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布戏自。 她就那樣靜靜地躺著,像睡著了一般伤锚。 火紅的嫁衣襯著肌膚如雪擅笔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音猛们,去河邊找鬼榛搔。 笑死,一個胖子當(dāng)著我的面吹牛啦吧,可吹牛的內(nèi)容都是我干的妙痹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庐橙,長吁一口氣:“原來是場噩夢啊……” “哼假勿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起态鳖,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤转培,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浆竭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浸须,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年邦泄,在試婚紗的時候發(fā)現(xiàn)自己被綠了删窒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虎韵,死狀恐怖易稠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情包蓝,我是刑警寧澤驶社,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站测萎,受9級特大地震影響亡电,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硅瞧,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一份乒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腕唧,春花似錦或辖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至但惶,卻和暖如春耳鸯,著一層夾襖步出監(jiān)牢的瞬間湿蛔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工县爬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留阳啥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓财喳,卻偏偏與公主長得像察迟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纲缓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容