Spring Boot 2.0 的快速入門(圖文教程)
大家都知道贱枣,Spring Framework 是 Java/Spring 應(yīng)用程序跨平臺(tái)開發(fā)框架局装,也是 Java EE(Java Enterprise Edition) 輕量級(jí)框架湃交,其 Spring 平臺(tái)為 Java 開發(fā)者提供了全面的基礎(chǔ)設(shè)施支持花沉。 雖然 Spring 基礎(chǔ)組件的代碼是輕量級(jí)坟比,但其配置依舊是重量級(jí)的本姥。
那是怎么解決了呢?當(dāng)然是 Spring Boot焦辅,Spring Boot 提供了新的編程模式博杖,讓開發(fā) Spring 應(yīng)用變得更加簡(jiǎn)單方便。本書將會(huì)由各個(gè)最佳實(shí)踐工程出發(fā)氨鹏,涉及 Spring Boot 開發(fā)相關(guān)的各方面欧募。下面先了解下 Spring Boot 框架。
1.1 Spring Boot 是什么
Spring Boot (Boot 顧名思義仆抵,是引導(dǎo)的意思)框架是用于簡(jiǎn)化 Spring 應(yīng)用從搭建到開發(fā)的過程跟继。應(yīng)用開箱即用,只要通過一個(gè)指令镣丑,包括命令行java -jar舔糖、SpringApplication應(yīng)用啟動(dòng)類 、 Spring Boot Maven 插件等莺匠,就可以啟動(dòng)應(yīng)用了金吗。另外,Spring Boot 強(qiáng)調(diào)只需要很少的配置文件趣竣,所以在開發(fā)生產(chǎn)級(jí) Spring 應(yīng)用中摇庙,讓開發(fā)變得更加高效和簡(jiǎn)易。目前遥缕,Spring Boot 版本是 2.x 版本卫袒。
1.1.1 Spring Boot 2.x 特性
Spring Boot 2.x 具有哪些生產(chǎn)的特性呢?常用特性如下:
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)單使用代碼片段如下:
publicstaticvoidmain(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)嵌容器等烤低。
開發(fā)中肘交,很多功能是通過添加 Starter 組件的方式來進(jìn)行實(shí)現(xiàn)。那么扑馁,Spring Boot 2.x 常用的 Starter 組件有哪些呢涯呻?
1.1.2 Spring Boot 2.x Starter 組件
Spring Boot 官方提供了很多 Starter 組件,涉及 Web腻要、模板引擎复罐、SQL 、NoSQL雄家、緩存效诅、驗(yàn)證、日志、測(cè)試乱投、內(nèi)嵌容器咽笼,還提供了事務(wù)、消息戚炫、安全剑刑、監(jiān)控、大數(shù)據(jù)等支持双肤。前面模塊會(huì)在本書中一一介紹施掏,后面這些模塊本書不會(huì)涉及,如需自行請(qǐng)參看 Spring Boot 官方文檔杨伙。
每個(gè)模塊會(huì)有多種技術(shù)實(shí)現(xiàn)選型支持其监,來實(shí)現(xiàn)各種復(fù)雜的業(yè)務(wù)需求:
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 等
另外,Spring WebFlux 框架目前支持 Servlet 3.1 以上的 Servlet 容器和 Netty尉辑,各種模塊組成了 Spring Boot 2.x 的工作常用技術(shù)棧帆精,如圖 1-1 所示。
圖 1-1 Spring Boot 技術(shù)架構(gòu)
正如白貓黑貓隧魄,能抓住老鼠的就是好貓卓练。在上述技術(shù)選型中,需要為公司業(yè)務(wù)的要求和團(tuán)隊(duì)技能選擇最有效最合適的設(shè)計(jì)方案购啄、架構(gòu)和編程模型襟企。
1.1.3 Spring Boot 應(yīng)用場(chǎng)景
Spring Boot 模塊眾多,代表著應(yīng)用場(chǎng)景也非常廣泛狮含,包括 Web 應(yīng)用整吆、SOA 及微服務(wù)等拱撵。在 Web 應(yīng)用中,Spring Boot 封裝了 Spring MVC 即可以提供 MVC 模式開發(fā)傳統(tǒng)的 Web表蝙,又可以開發(fā) REST API 拴测,來開發(fā) Web、APP府蛇、Open API 各種應(yīng)用集索。在 SOA 及微服務(wù)中,用 Spring Boot 可以包裝每個(gè)服務(wù)汇跨,本身可以提供輕量級(jí) REST API 服務(wù)接口务荆。也可以整合流行的 RPC 框架(Dubbo 等),提供 RPC 服務(wù)接口穷遂,只要簡(jiǎn)單地加入對(duì)應(yīng)的 Starter 組件即可函匕。在微服務(wù)實(shí)戰(zhàn)中,推薦使用 Spring Cloud蚪黑,是一套基于 Spring Boot 實(shí)現(xiàn)分布式系統(tǒng)的工具盅惜,適用于構(gòu)建微服務(wù)。
上面從組件和特性兩方面介紹了 Spring Boot 2.x忌穿,下面快速入門去了解 Spring Boot 2.x 的基本用法抒寂。
1.2 快速入門工程
在搭建一個(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)建工程
開發(fā)工程
運(yùn)行工程
1.2.1 創(chuàng)建工程 “Hello Spring Boot”
在 IDEA 中,利用 Spring Initializr 插件進(jìn)行創(chuàng)建名為 chapter-1-spring-boot-quickstart 工程详羡。具體工程創(chuàng)建方式可見 1.3.1 章節(jié)仍律。
第一步,打開 IDEA实柠,選擇新建工程按鈕水泉,然后選擇左側(cè)欄 Spring Initializr 選項(xiàng)。默認(rèn)選擇 JDK 版本和 Spring Initializr 的網(wǎng)站地址窒盐。如果是封閉式內(nèi)網(wǎng)開發(fā)草则,也可以搭建一個(gè) Spring Initializr 的內(nèi)網(wǎng)服務(wù)。如圖 1-2 所示蟹漓。
圖 1-2 創(chuàng)建工程之選擇使用 Spring Initializr
第二步炕横,點(diǎn)擊下一步,輸入 Maven 工程信息葡粒。這里對(duì)應(yīng)的 Maven 信息為:
groupId:demo.springboot
artifactId:chapter-1-spring-boot-quickstart
version:1.0
這里還可以設(shè)置工程的名稱和描述等份殿,如圖 1-3 所示。
圖 1-3 創(chuàng)建工程之新建工程信息
第三步塔鳍,點(diǎn)擊下一步伯铣,在依賴選擇可視化操作中,下拉選擇 Spring Boot 版本號(hào)和勾選工程需要的 Starter 組件和其他依賴轮纫。這里選擇 Web 依賴腔寡,為了去實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 REST API 服務(wù),即訪問 GET:/hello 會(huì)返回 “Hello掌唾,Spring Boot放前!” 的字符串。如圖 1-4 所示糯彬。
圖 1-4 創(chuàng)建工程之選擇 Web 依賴
這樣就創(chuàng)建好名為 chapter-1-spring-boot-quickstart 工程凭语,使用 IDEA 提示打開工程即可。
1.2.2 開發(fā)工程之 Pom 依賴
在 pom.xml 配置文件中撩扒,parent節(jié)點(diǎn)配置是 Spring Boot 的 Parent 依賴似扔,代碼如下:
org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE
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 憋飞。
因?yàn)閯?chuàng)建工程時(shí)霎苗,勾選 Web 依賴,Spring Initializr 會(huì)自動(dòng)添加 Web 依賴搀崭,代碼如下:
<!-- Web 依賴 --> org.springframework.boot spring-boot-starter-web
正如上面所說叨粘,這里只需要加入 groupId 和 artifactId 即可,不需要配置 version瘤睹。
1.2.3 開發(fā)工程之應(yīng)用啟動(dòng)類
在工程 src 目錄中升敲,已經(jīng)自動(dòng)創(chuàng)建了包目錄demo.springboot,其包下自動(dòng)創(chuàng)建了 Spring Boot 應(yīng)用啟動(dòng)類轰传,代碼如下:
@SpringBootApplicationpublic classQuickStartApplication{
? ? publicstaticvoidmain(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ā)所有CommandLineRunnerBean
在實(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ù)
1.2.4 開發(fā)工程之 Hello 控制層類
在工程中新建包目錄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;
@Controllerpublic 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;
@RestControllerpublic 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ì)象作為返回體无埃。
1.2.5 運(yùn)行工程
一個(gè)簡(jiǎn)單的 Spring Boot 工程就開發(fā)完畢了徙瓶,下面運(yùn)行工程驗(yàn)證下。
Maven 編譯工程
使用 IDEA 右側(cè)工具欄嫉称,點(diǎn)擊 Maven Project Tab 侦镇,點(diǎn)擊使用下 Maven 插件的install命令。如圖 1-5 所示:
圖 1-5 IDEA Maven 工具欄
或者使用命令行的形式澎埠,在工程根目錄下虽缕,執(zhí)行 Maven 清理和安裝工程的指令:
cd chapter-1-spring-boot-quickstart
mvn clean install
在 target 目錄中看到 chapter-1-spring-boot-quickstart-1.0.jar 文件生成,或者在編譯的控制臺(tái)中看到成功的輸出:
... 省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:30 min
[INFO] Finished at: 2017-10-15T10:00:54+08:00[INFO] Final Memory: 31M/174M
[INFO] ------------------------------------------------------------------------
上面兩種方式都可以成功編譯工程蒲稳。
運(yùn)行工程
在 IDEA 中執(zhí)行QuickStartApplication類啟動(dòng)氮趋,任意正常模式或者 Debug 模式〗可以在控制臺(tái)看到成功運(yùn)行的輸出:
... 省略
2017-10-15 10:05:19.994? INFO 17963 --- [? ? ? ? ? main] o.s.b.w.embedded.tomcat.TomcatWebServer? : Tomcat started on port(s): 8080 (http)
2017-10-15 10:05:20.000? INFO 17963 --- [? ? ? ? ? main] demo.springboot.QuickStartApplication? ? : Started QuickStartApplication in 5.544 seconds (JVM running for 6.802)
打開瀏覽器剩胁,訪問 /hello 地址,會(huì)看到如圖 1-6 所示的返回結(jié)果:
圖 1-6 Hello 頁面
再訪問 /book/hello 地址祥国,會(huì)看到如圖 1-7 所示的返回結(jié)果:
圖 1-7 Hello Book 頁面
本章工程名為 chapter-1-spring-boot-quickstart昵观,具體代碼見本書對(duì)應(yīng)的 GitHub。
1.3 Spring Boot 工程構(gòu)建
快速入門中還沒有詳細(xì)介紹 Spring Boot 工程構(gòu)建舌稀。工程構(gòu)建包括創(chuàng)建工程啊犬、工程結(jié)構(gòu)和運(yùn)行工程等。
1.3.1 工程創(chuàng)建方式
Spring Boot Maven 工程壁查,就是普通的 Maven 工程觉至,加入了對(duì)應(yīng)的 Spring Boot 依賴即可。Spring Initializr 則是像代碼生成器一樣睡腿,自動(dòng)就給你出來了一個(gè) Spring Boot Maven 工程语御。Spring Initializr 有兩種方式可以得到 Spring Boot Maven 骨架工程:
start.spring.io 在線生成
Spring 官方提供了名為 Spring Initializr 的網(wǎng)站,去引導(dǎo)你快速生成 Spring Boot 應(yīng)用席怪。網(wǎng)站地址為:https://start.spring.io应闯,操作步驟如下:
第一步,選擇 Maven 或者 Gradle 構(gòu)建工具挂捻,開發(fā)語言 Java 碉纺、Kotlin 或者 Groovy,最后確定 Spring Boot 版本號(hào)。這里默認(rèn)選擇 Maven 構(gòu)建工具骨田、Java 開發(fā)語言和 Spring Boot 2.0.0唬涧。
第二步,輸入 Maven 工程信息盛撑,即項(xiàng)目組groupId和名字artifactId。這里對(duì)應(yīng) Maven 信息為:
groupId:demo.springboot
artifactId:chapter-1-spring-boot-quickstart
這里默認(rèn)版本號(hào) version 為 0.0.1-SNAPSHOT 捧搞。三個(gè)屬性在 Maven 依賴倉庫是唯一標(biāo)識(shí)的抵卫。
第三步,選擇工程需要的 Starter 組件和其他依賴胎撇。最后點(diǎn)擊生成按鈕介粘,即可獲得骨架工程壓縮包。如圖 1-8 所示晚树。
圖 1-8 Spring Initializr 在線生成
IDEA 支持 Spring Initializr 生成
IDEA 支持 Spring Initializr 生成姻采,這對(duì)于開發(fā)來說更進(jìn)一步的省事,也是推薦的創(chuàng)建工程方式爵憎。
第一步慨亲,打開 IDEA,選擇新建工程按鈕宝鼓,然后選擇左側(cè)欄 Spring Initializr 選項(xiàng)刑棵。默認(rèn)選擇 JDK 版本和 Spring Initializr 的網(wǎng)站地址。如果是封閉式內(nèi)網(wǎng)開發(fā)愚铡,也可以搭建一個(gè) Spring Initializr 的內(nèi)網(wǎng)服務(wù)蛉签。
第二步,點(diǎn)擊下一步沥寥,輸入 Maven 工程信息碍舍。這里對(duì)應(yīng)的 Maven 信息為:
groupId:demo.springboot
artifactId:chapter-1-spring-boot-quickstart
version:1.0
這里還可以設(shè)置工程的名稱和描述等。
第三步邑雅,點(diǎn)擊下一步片橡,在可視化操作中,下拉選擇 Spring Boot 版本號(hào)和勾選工程需要的 Starter 組件和其他依賴蒂阱。如圖 1-9 所示锻全。
圖 1-9 IDEA 支持 Spring Initializr 生成
1.3.2 工程結(jié)構(gòu)
通過工程創(chuàng)建,得到的工程有默認(rèn)的結(jié)構(gòu)录煤,其目錄結(jié)構(gòu)如下:
├── pom.xml└── src ├── main │ ├── java │ │ └── demo │ │ └── springboot │ │ └── QuickstartApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── demo └── springboot └── QuickstartApplicationTests.java
這是默認(rèn)的工程結(jié)構(gòu)鳄厌,java 目錄中是編寫代碼的源目錄,比如三層模型大致會(huì)新建三個(gè)包目錄妈踊,web 包負(fù)責(zé) web 服務(wù)了嚎,service 包負(fù)責(zé)業(yè)務(wù)邏輯,domain 包數(shù)據(jù)源服務(wù)。對(duì)應(yīng) java 目錄的是 test 目錄歪泳,編寫單元測(cè)試的目錄萝勤。
resources 目錄會(huì)有 application.properties 應(yīng)用配置文件,還有默認(rèn)生成的 static 和 templates 目錄呐伞,static 用于存放靜態(tài)資源文件敌卓,templates 用于存放模板文件×媲猓可以在 application.properties 中自定義配置資源和模板目錄趟径。
1.3.3 工程運(yùn)行方式
上面使用應(yīng)用啟動(dòng)類運(yùn)行工程 “Hello Spring Boot”,這是其中一種工程運(yùn)行方式癣防。 Spring Boot 應(yīng)用的運(yùn)行方式很簡(jiǎn)單蜗巧,下面介紹下這三種運(yùn)行方式:
1. 使用應(yīng)用啟動(dòng)類
在 IDEA 中直接執(zhí)行應(yīng)用啟動(dòng)類,來運(yùn)行 Spring Boot 應(yīng)用蕾盯。日常開發(fā)中幕屹,會(huì)經(jīng)常使用這種方式啟動(dòng)應(yīng)用。常用的會(huì)有 Debug 啟動(dòng)模式级遭,方便在開發(fā)中進(jìn)行代碼調(diào)試和 bug 處理望拖。自然,Debug 啟動(dòng)模式會(huì)比正常模式稍微慢一些挫鸽。
2. 使用 Maven 運(yùn)行
通過 Maven 運(yùn)行靠娱,需要配置 Spring Boot Maven 插件,在 pom.xml 配置文件中掠兄,新增build節(jié)點(diǎn)并配置插件 spring-boot-maven-plugin像云,代碼如下:
<!-- Spring Boot Maven 插件 --> org.springframework.boot spring-boot-maven-plugin
在工程根目錄中,運(yùn)行如下 Maven 命令來運(yùn)行 Spring Boot 應(yīng)用:
# 生成構(gòu)建信息文件spring-boot:build-info# 幫助信息spring-boot:help# 重新打包spring-boot:repackage# 運(yùn)行工程spring-boot:run# 將工程集成到集成測(cè)試階段蚂夕,進(jìn)行工程的聲明周期管理spring-boot:startspring-boot:stop
3. 使用 Java 命令運(yùn)行
使用 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 文件婿牍。通過上述三種方式都可以成功運(yùn)行 Spring Boot 工程侈贷,成功運(yùn)行輸出的控制臺(tái)信息如圖 1-10 所示。
圖 1-10 控制臺(tái)成功信息
1.4 安裝使用 Spring Boot
在上面工程 “Hello Spring Boot” 中等脂,使用了 Maven 方式去安裝使用了 Spring Boot 俏蛮。使用 Maven 或 Gradle 安裝是推薦的方式。新的 Java 程序員或從未有過經(jīng)驗(yàn)開發(fā) Spring Boot 的開發(fā)者上遥,推薦使用 Spring Boot CLI 安裝學(xué)習(xí)更好搏屑。下面簡(jiǎn)單介紹下三種方式。
1.4.1 Maven 方式
Maven 是依賴管理的構(gòu)建工具粉楚。類似其他依賴庫使用一樣辣恋,在 Maven 配置中加入 Spring Boot 相關(guān)依賴配置即可安裝使用 Spring Boot 亮垫。Spring Boot 需要 Maven 3.2 及以上版本的支持。具體 Maven 安裝介紹伟骨,詳見官網(wǎng) maven.apache.org饮潦。
Spring Boot 依賴使用 org.springframework.boot 作為其項(xiàng)目組 groupId 名稱,Starter 組件的名字 artifactId 以 spring-boot-starter-xxx 形式命名携狭。
注意继蜡,如果不想使用 spring-boot-starter-parent 父 Starter 組件,可以將 spring-boot-dependencies 作為工程依賴管理庫逛腿,并指定 scope 為 import壹瘟。代碼如下:
org.springframework.boot spring-boot-dependencies 2.0.0 pom import
1.4.2 Gradle 方式
Gradle 是依賴管理的構(gòu)建工具。類似 Maven 方式一樣鳄逾,Spring Boot 需要 Gradle 4 的支持。具體 Gradle 安裝介紹灵莲,詳見官網(wǎng) www.gradle.org雕凹。
1.4.3 Spring Boot CLI
Spring Boot CLI 是 Spring Boot Commad Line 的縮寫,是 Spring Boot 命令行工具政冻。在 Spring Boot CLI 可以跑 Groovy 腳本枚抵,通過簡(jiǎn)單的 Java 語法就可以快速而又簡(jiǎn)單的學(xué)習(xí) Spring Boot 原型。
Spring Boot CLI 安裝
打開 Spring Boot CLI 下載頁面明场,地址:https://repo.spring.io/milestone/org/springframework/boot/spring-boot-cli汽摹。下載需要的spring-boot-cli-2.0.0-bin.zip 或者 spring-boot-cli-2.0.0-bin.tar.gz 依賴,并解壓到安裝目錄苦锨,并指定其 bin 目錄添加環(huán)境變量逼泣。
比如 Mac 環(huán)境下,代碼如下:
export PATH=${PATH}:/spring-boot-cli-2.0.0.RELEASE/bin
比如 Windows 環(huán)境下舟舒,代碼如下:
set PATH=D:\spring-boot-cli-2.0.0.RELEASE\bin;%PATH%
執(zhí)行下面指令能輸出對(duì)應(yīng)的版本拉庶,用來驗(yàn)證是否安裝成功,代碼如下:
spring --version
在控制臺(tái)中會(huì)出現(xiàn)成功的輸出:
Spring CLI v2.0.0
另外秃励,也支持 Homebrew氏仗、MacPorts 進(jìn)行安裝。
使用 Spring Boot CLI
安裝好 Spring Boot CLI 基礎(chǔ)環(huán)境后夺鲜,運(yùn)行 “Hello Spring Boot” 就更加簡(jiǎn)單了皆尔,新建 hello.groovy 文件,代碼如下:
@RestControllerpublic classHelloController{
? ? @RequestMapping(value = "/hello")
? ? publicStringsayHello(){
? ? ? ? return "Hello币励,Spring Boot慷蠕!";
? ? }
}
然后執(zhí)行下面指令,進(jìn)行編譯運(yùn)行應(yīng)用:
spring run hello.groovy
也可以食呻,通過--去外化配置屬性值砌们。比如配置端口號(hào)為 8081:spring run hello.groovy -- --server.port=9000。等控制臺(tái)成功輸出,打開瀏覽器浪感,訪問 /hello 地址昔头,可以得到 "Hello,Spring Boot影兽!" 的結(jié)果揭斧。
注意:
具體如何使用 Spring CLI,詳見官方使用文檔:docs.spring.io/spring-boot/docs/current/reference/html/cli-using-the-cli.html
1.5 服務(wù)器部署方式
基礎(chǔ)環(huán)境安裝如上面說的峻堰,需要 JDK 環(huán)境讹开、Maven 環(huán)境等
1.5.1 Win 服務(wù)器
推薦使用 AlwaysUp:
使用方式也很簡(jiǎn)單:
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
啟動(dòng)應(yīng)用的腳本:start.sh
重啟應(yīng)用的腳本:stop.sh
1.6 小結(jié)
從 Spring Boot 介紹開始旦万,包括特性、Starter 組件以及應(yīng)用場(chǎng)景镶蹋,又通過快速入門工程出發(fā)成艘,講解了開發(fā) Spring Boot 應(yīng)用涉及到的 Pom 依賴、應(yīng)用啟動(dòng)類以及控制層贺归,然后講解了工程構(gòu)建周期的創(chuàng)建淆两、結(jié)構(gòu)及運(yùn)行方式,此外還總結(jié)了安裝使用 Spring Boot 的三種方式拂酣。