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ā)布!