spring boot 入門

spring boot 特性

SpringApplication 應(yīng)用類
自動(dòng)配置
外化配置
內(nèi)嵌容器
Starter 組件
還有對(duì)日志铅搓、Web、消息搀捷、測(cè)試及擴(kuò)展等支持星掰。
SpringApplication
SpringApplication 是 Spring Boot 應(yīng)用啟動(dòng)類多望,在 main() 方法中調(diào)用 SpringApplication.run() 靜態(tài)方法,即可運(yùn)行一個(gè) Spring Boot 應(yīng)用氢烘。簡(jiǎn)單使用代碼片段如下:

public static void main(String[] args) {
    SpringApplication.run(QuickStartApplication.class, args);
}

Spring Boot 運(yùn)行的應(yīng)用是獨(dú)立的一個(gè) Jar 應(yīng)用怀偷,實(shí)際上在運(yùn)行時(shí)啟動(dòng)了應(yīng)用內(nèi)部的內(nèi)嵌容器,容器初始化 Spring 環(huán)境及其組件并啟動(dòng)應(yīng)用播玖。也可以使用 Spring Boot 開發(fā)傳統(tǒng)的應(yīng)用椎工,只要通過 Spring Boot Maven 插件將 Jar 應(yīng)用轉(zhuǎn)換成 War 應(yīng)用即可。

自動(dòng)配置
Spring Boot 在不需要任何配置情況下蜀踏,就直接可以運(yùn)行一個(gè)應(yīng)用维蒙。實(shí)際上,Spring Boot 框架的 spring-boot-autoconfigure 依賴做了很多默認(rèn)的配置項(xiàng)果覆,即應(yīng)用默認(rèn)值颅痊。這種模式叫做 “自動(dòng)配置”。Spring Boot 自動(dòng)配置會(huì)根據(jù)添加的依賴局待,自動(dòng)加載依賴相關(guān)的配置屬性并啟動(dòng)依賴斑响。例如,默認(rèn)用的內(nèi)嵌式容器是 Tomcat 燎猛,端口默認(rèn)設(shè)置為 8080恋捆。

外化配置
Spring Boot 簡(jiǎn)化了配置照皆,在 application.properties 文件配置常用的應(yīng)用屬性重绷。Spring Boot 可以將配置外部化,這種模式叫做 “外化配置”膜毁。將配置從代碼中分離外置昭卓,最明顯的作用是只要簡(jiǎn)單地修改下外化配置文件,就可以在不同環(huán)境中瘟滨,可以運(yùn)行相同的應(yīng)用代碼候醒。

內(nèi)嵌容器
Spring Boot 啟動(dòng)應(yīng)用,默認(rèn)情況下是自動(dòng)啟動(dòng)了內(nèi)嵌容器 Tomcat杂瘸,并且自動(dòng)設(shè)置了默認(rèn)端口為 8080倒淫。另外還提供了對(duì) Jetty、Undertow 等容器的支持败玉。開發(fā)者自行在添加對(duì)應(yīng)的容器 Starter 組件依賴敌土,即可配置并使用對(duì)應(yīng)內(nèi)嵌容器實(shí)例。

Starter 組件
Spring Boot 提供了很多 “開箱即用” 的 Starter 組件运翼。Starter 組件是可被加載在應(yīng)用中的 Maven 依賴項(xiàng)返干。只需要在 Maven 配置中添加對(duì)應(yīng)的依賴配置,即可使用對(duì)應(yīng)的 Starter 組件血淌。例如矩欠,添加 spring-boot-starter-web 依賴,就可用于構(gòu)建 REST API 服務(wù),其包含了 Spring MVC 和 Tomcat 內(nèi)嵌容器等癌淮。

多種Starter組件
Web:Spring Web躺坟、Spring WebFlux 等
模板引擎:Thymeleaf、FreeMarker乳蓄、Groovy瞳氓、Mustache 等
SQL:MySQL 、H2 等
NoSQL:Redis栓袖、MongoDB匣摘、Cassandra、Elasticsearch 等
驗(yàn)證框架:Hibernate Validator裹刮、Spring Validator 等
日志框架:Log4j2音榜、Logback 等
測(cè)試:JUnit、Spring Boot Test捧弃、AssertJ赠叼、Mockito 等
內(nèi)嵌容器:Tomcat、Jetty违霞、Undertow 等

快速入門工程

在搭建一個(gè) Spring Boot 工程應(yīng)用前嘴办,需要配置好開發(fā)環(huán)境及安裝好開發(fā)工具:

JDK 1.8+
Spring Boot 2.x 要求 JDK 1.8 環(huán)境及以上版本。另外买鸽,Spring Boot 2.x 只兼容 Spring Framework 5.0 及以上版本涧郊。
Maven 3.2+
為 Spring Boot 2.x 提供了相關(guān)依賴構(gòu)建工具是 Maven,版本需要 3.2 及以上版本眼五。使用 Gradle 則需要 1.12 及以上版本妆艘。本書使用 Maven 對(duì) Spring Boot 工程進(jìn)行依賴和構(gòu)建管理。
IntelliJ IDEA
IntelliJ IDEA (簡(jiǎn)稱 IDEA)是常用的開發(fā)工具看幼,也是本書推薦使用的批旺。同樣使用 Eclipse IDE,也能完成本書的實(shí)踐案例诵姜。另外汽煮,本書的工程都會(huì)在 GitHub 上開源,如需要請(qǐng)自行安裝 Git 環(huán)境棚唆。
注意:
JDK 安裝暇赤、Maven 安裝、Git 安裝和 IntelliJ IDEA 開發(fā)工具安裝詳解瑟俭,見附錄 A

安裝環(huán)境雖然耗時(shí)翎卓,但磨刀不誤砍柴工。下面開發(fā) “Hello Spring Boot” 工程摆寄,大致分下面三個(gè)步驟:

創(chuàng)建工程

利用 spring Initializr 插件創(chuàng)建工程

開發(fā)工程

1.Pom 依賴
parent 節(jié)點(diǎn)配置是 Spring Boot 的 Parent 依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/>
</parent>

spring-boot-starter-parent 依賴失暴,是 Spring Boot 提供的一個(gè)特殊的 Starter 組件坯门,本身沒有任何依賴。

spring-boot-starter-parent 職責(zé)逗扒,一方面是用于提供 Maven 配置的默認(rèn)值古戴,即在 Spring Boot 2.x 中設(shè)置 JDK 1.8 為默認(rèn)編譯級(jí)別、設(shè)置 UTF-8 編碼等矩肩。另一方面现恼,其父依賴 spring-boot-dependencies 中的 dependency-management 節(jié)點(diǎn)提供了所有 Starter 組件依賴配置的缺省版本值,但不提供依賴本身的繼承黍檩。這樣的作用是使用各個(gè)組件依賴拿來即用叉袍,不需要指定 version

2.應(yīng)用啟動(dòng)類
在工程 src 目錄中,已經(jīng)自動(dòng)創(chuàng)建了包目錄 demo.springboot 刽酱,其包下自動(dòng)創(chuàng)建了 Spring Boot 應(yīng)用啟動(dòng)類喳逛,代碼如下:

@SpringBootApplication
public class QuickStartApplication {
    public static void main(String[] args) {
        SpringApplication.run(QuickStartApplication.class, args);
    }
}

Spring Boot 應(yīng)用啟動(dòng)類,是可以用來啟動(dòng) Spring Boot 應(yīng)用棵里。其包含了 @SpringBootApplication 注解和 SpringApplication 類润文,并調(diào)用 SpringApplication 類的 run() 方法,就可以啟動(dòng)該應(yīng)用殿怜。

@SpringBootApplication 注解
@SpringBootApplication 注解用標(biāo)注啟動(dòng)類典蝌,被標(biāo)注的類為一個(gè)配置類,并會(huì)觸發(fā)自動(dòng)配置和 Starter 組件掃描头谜。根據(jù)源碼可得骏掀,該注解配置了 @SpringBootConfiguration、 @EnableAutoConfiguration 和 @ComponentScan 三個(gè)注解乔夯, @SpringBootConfiguration 注解又配置了 @EnableAutoConfiguration 砖织。所以該注解的職責(zé)相當(dāng)于結(jié)合了 @Configuration, @EnableAutoConfiguration 和 @ComponentScan 三個(gè)注解功能。

@SpringBootApplication 注解的職責(zé)如下:

在被該注解修飾的類中末荐,可以用 @Bean 注解來配置多個(gè) Bean 。應(yīng)用啟動(dòng)時(shí)新锈,Spring 容器會(huì)加載 Bean 并注入到 Spring 容器甲脏。
啟動(dòng) Spring 上下文的自動(dòng)配置∶冒剩基于依賴和定義的 Bean 會(huì)自動(dòng)配置需要的 Bean 和類块请。
掃描被 @Configuration 修飾的配置類。也會(huì)掃描 Starter 組件的配置類拳缠,并啟動(dòng)加載其默認(rèn)配置
SpringApplication 類
大多數(shù)情況下墩新,在 main 方法中調(diào)用 SpringApplication 類的靜態(tài)方法 run(Class, String[]) ,用來引導(dǎo)啟動(dòng) Spring 應(yīng)用程序窟坐。默認(rèn)情況下海渊,該類的職責(zé)會(huì)執(zhí)行如下步驟:
– 創(chuàng)建應(yīng)用上下文 ApplicationContext 實(shí)例
– 注冊(cè) CommandLinePropertySource绵疲,將命令行參數(shù)賦值到 Spring 屬性
– 刷新應(yīng)用上下文,加載所有單例
– 觸發(fā)所有 CommandLineRunner Bean

在實(shí)際開發(fā)中如果需要自定義創(chuàng)建高級(jí)的配置臣疑,可以通過 run(Class, String[]) 方法的第二個(gè)參數(shù)盔憨,并以 String 數(shù)組的形式傳入。這是 run 幾個(gè)重載方法的 API 文檔:

API org.springframework.boot.SpringApplication
static run(Class>[] primarySources, String[] args)
返回正在運(yùn)行的應(yīng)用上下文 ApplicationContext
參數(shù):
primarySources 應(yīng)用指定的主要類源讯沈,數(shù)組形式
args 應(yīng)用參數(shù)

static run(Class> primarySource, String… args)
返回正在運(yùn)行的應(yīng)用上下文 ApplicationContext

參數(shù):
primarySource 應(yīng)用指定的主要類源
args 應(yīng)用參數(shù)

run(String… args)
返回正在運(yùn)行的應(yīng)用上下文 ApplicationContext

參數(shù):
args 應(yīng)用參數(shù)

3.控制層
在工程中新建包目錄 demo.springboot.web 郁岩,并在目錄中創(chuàng)建名為 HelloController 的控制層類,代碼如下:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    @ResponseBody
    public String sayHello() {
        return "Hello缺狠,Spring Boot问慎!";
    }
}

上面定義了簡(jiǎn)單的 REST API 服務(wù),即 GET:/hello挤茄。表示該 Hello 控制層 sayHello() 方法會(huì)提供請(qǐng)求路徑為 /hello 和請(qǐng)求方法為 GET 的 HTTP 服務(wù)接口蝴乔。Spring 4.0 的注解 @RestController 支持實(shí)現(xiàn) REST API 控制層。本質(zhì)上驮樊,該注解結(jié)合了 @Controller 和 @ResponseBody 的功能薇正。所以將上面 HelloController 可以改造升級(jí)成 HelloBookController,代碼如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloBookController {

    @RequestMapping(value = "/book/hello",method = RequestMethod.GET)
    public String sayHello() {
        return "Hello囚衔,《Spring Boot 2.x 核心技術(shù)實(shí)戰(zhàn) - 上 基礎(chǔ)篇》挖腰!";
    }
}

spring mvc 知識(shí)點(diǎn)
@Controller 注解
@Controller 對(duì)控制層類進(jìn)行標(biāo)注,職責(zé)是使控制層可以處理 HTTP 請(qǐng)求练湿,簡(jiǎn)單可以理解為猴仑,使控制層能接受請(qǐng)求,處理請(qǐng)求并響應(yīng)肥哎。
@RequestMapping 注解
@RequestMapping 對(duì)控制層類的方法進(jìn)行標(biāo)注辽俗,職責(zé)是標(biāo)明方法對(duì)應(yīng)的 HTTP 請(qǐng)求路由的關(guān)系映射。參數(shù) value 主要請(qǐng)求映射地址篡诽,可接受多個(gè)地址崖飘。參數(shù) method 標(biāo)注 HTTP 方法,常用如: GET杈女,POST朱浴,HEAD,OPTIONS达椰,PUT翰蠢,PATCH,DELETE啰劲,TRACE梁沧。默認(rèn)是 GET HTTP 方法,在 GET 請(qǐng)求的情況下蝇裤,可以縮寫成 @RequestMapping(value = "/book/hello") 廷支。Spring 4 支持直接使用 XXXMapping 形式的注解频鉴,比如上面代碼可以寫成 @GetMapping("/book/hello")。
@ResponseBody 注解
@ResponseBody 對(duì)控制層類的方法進(jìn)行標(biāo)注酥泞,職責(zé)是指定響應(yīng)體為方法的返回值砚殿。上面代碼中,案例是以字符串的形式返回芝囤,自然可以使用其他復(fù)雜對(duì)象作為返回體似炎。

運(yùn)行工程

maven編譯工程

使用 IDEA 右側(cè)工具欄,點(diǎn)擊 Maven Project Tab 悯姊,點(diǎn)擊使用下 Maven 插件的 install 命令

cd chapter-1-spring-boot-quickstart
mvn clean install
```在 target 目錄中看到 chapter-1-spring-boot-quickstart-1.0.jar 文件生成羡藐,或者在編譯的控制臺(tái)中看到成功的輸出

運(yùn)行工程三種方式
1.在 IDEA 中執(zhí)行 QuickStartApplication 類啟動(dòng),任意正常模式或者 Debug 模式悯许∑袜拢可以在控制臺(tái)看到成功運(yùn)行的輸出
2.通過 Maven 運(yùn)行,需要配置 Spring Boot Maven 插件先壕,在 pom.xml 配置文件中瘩扼,新增 build 節(jié)點(diǎn)并配置插件 spring-boot-maven-plugin

<build>
<plugins>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

在工程根目錄中,運(yùn)行如下 Maven 命令來運(yùn)行 Spring Boot 應(yīng)用:

mvn spring-boot:run

實(shí)際調(diào)用的是 pom.xml 配置的 Spring Boot Maven 插件 spring-boot-maven-plugin 垃僚,上面執(zhí)行了插件提供的 run 指令集绰。也可以在 IDEA 右側(cè)工具欄的 Maven Project Tab 中,找到 Maven 插件的 spring-boot-maven-plugin谆棺,執(zhí)行相應(yīng)的指令

生成構(gòu)建信息文件

spring-boot:build-info

幫助信息

spring-boot:help

重新打包

spring-boot:repackage

運(yùn)行工程

spring-boot:run

將工程集成到集成測(cè)試階段栽燕,進(jìn)行工程的聲明周期管理

spring-boot:start
spring-boot:stop


3.java命令
使用 Maven 或者 Gradle 安裝工程,生成可執(zhí)行的工程 jar 后改淑,運(yùn)行如下 Java 命令來運(yùn)行 Spring Boot 應(yīng)用:

java -jar target/chapter-1-spring-boot-quickstart-1.0.jar 
這里運(yùn)行了 spring-boot-maven-plugin 插件編譯出來的可執(zhí)行 jar 文件


#服務(wù)器部署
基礎(chǔ)環(huán)境安裝如上面說的碍岔,需要 JDK 環(huán)境、Maven 環(huán)境等

1.5.1 Win 服務(wù)器
推薦使用 AlwaysUp:

![file](https://upload-images.jianshu.io/upload_images/14139287-6cd1fef3e3573bd4.jpeg)

使用方式也很簡(jiǎn)單:

![file](https://upload-images.jianshu.io/upload_images/14139287-05ed3b0cd7de0969.jpeg)

1.5.2 Linux 服務(wù)器
推薦 yum 安裝基礎(chǔ)環(huán)境朵夏,比如安裝 JDK:

yum -y list java*
yum -y install java-1.8.0-openjdk*
java -version 
安裝 Maven:

yum -y list apache-maven
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven
mvn --v
Linux 使用 nohup 命令進(jìn)行對(duì)后臺(tái)程序的啟動(dòng)關(guān)閉蔼啦。

關(guān)閉應(yīng)用的腳本:stop.sh

![file](https://upload-images.jianshu.io/upload_images/14139287-bfab05b13066a350.jpeg)

啟動(dòng)應(yīng)用的腳本:start.sh
![file](https://upload-images.jianshu.io/upload_images/14139287-a545545254ab9b78.jpeg)


重啟應(yīng)用的腳本:stop.sh

![file](https://upload-images.jianshu.io/upload_images/14139287-e4131bd94404f5f3.jpeg)
> 本文由博客一文多發(fā)平臺(tái) [OpenWrite](https://openwrite.cn?from=article_bottom) 發(fā)布! 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侍郭,一起剝皮案震驚了整個(gè)濱河市询吴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亮元,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠摹,死亡現(xiàn)場(chǎng)離奇詭異爆捞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勾拉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門煮甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗温,“玉大人,你說我怎么就攤上這事成肘÷艟郑” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵双霍,是天一觀的道長(zhǎng)砚偶。 經(jīng)常有香客問我,道長(zhǎng)洒闸,這世上最難降的妖魔是什么染坯? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮丘逸,結(jié)果婚禮上单鹿,老公的妹妹穿的比我還像新娘。我一直安慰自己深纲,他們只是感情好仲锄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湃鹊,像睡著了一般儒喊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涛舍,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天澄惊,我揣著相機(jī)與錄音,去河邊找鬼富雅。 笑死掸驱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的没佑。 我是一名探鬼主播毕贼,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛤奢!你這毒婦竟也來了鬼癣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啤贩,失蹤者是張志新(化名)和其女友劉穎待秃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痹屹,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡章郁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了志衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖庄。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聊替,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出培廓,到底是詐尸還是另有隱情惹悄,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布肩钠,位于F島的核電站泣港,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔬将。R本人自食惡果不足惜爷速,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霞怀。 院中可真熱鬧惫东,春花似錦、人聲如沸毙石。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徐矩。三九已至滞时,卻和暖如春界逛,著一層夾襖步出監(jiān)牢的瞬間诉濒,已是汗流浹背蒸健。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工我磁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禁添。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓熟丸,卻偏偏與公主長(zhǎng)得像刺洒,于是被迫代替她去往敵國(guó)和親豫尽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子篙梢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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