Spring Boot 基礎(chǔ)(開(kāi)始使用 Spring Boot 編寫(xiě)能直接運(yùn)行的 Spring 應(yīng)用程序)

Spring Boot 是一個(gè)輕量級(jí)框架体箕,可以完成基于 Spring 的應(yīng)用程序的大部分配置工作。在本教程中,將學(xué)習(xí)如何使用 Spring Boot 的 starter压恒、特性和可執(zhí)行 JAR 文件結(jié)構(gòu)挡逼,快速創(chuàng)建能直接運(yùn)行的基于 Spring 的應(yīng)用程序括改。

簡(jiǎn)單介紹 Spring Boot 后,我將引導(dǎo)您設(shè)置并運(yùn)行兩個(gè) Spring Boot 應(yīng)用程序:一個(gè)簡(jiǎn)單的 “Hello, World” 應(yīng)用程序和一個(gè)稍微復(fù)雜一點(diǎn)的 Spring MVC RESTful Web 服務(wù)應(yīng)用程序家坎。請(qǐng)注意嘱能,我在應(yīng)用程序示例中使用的是 Spring Boot V1.5.2。推薦您使用 V1.5.2 或更高版本虱疏,但這些示例應(yīng)適用于任何高于 1.5 的版本惹骂。

前提條件

要充分掌握教程內(nèi)容,您應(yīng)該能熟練使用 Java? Development Kit V8 (JDK 8)做瞪。還需要熟悉 Eclipse IDE对粪、Maven 和 Git。

要順利學(xué)習(xí)本教程装蓬,請(qǐng)確保安裝了以下軟件:

深入介紹教程之前,我想簡(jiǎn)單介紹一下 Spring Boot履羞。

Spring Boot 是什么峦萎?

Spring Boot 的目的是提供一組工具,以便快速構(gòu)建容易配置的 Spring 應(yīng)用程序忆首。

問(wèn)題:Spring 很難配置爱榔!

如果您編寫(xiě)過(guò)基于 Spring 的應(yīng)用程序,就會(huì)知道只是完成 “Hello, World” 就需要大量配置工作糙及。這不是一件壞事:Spring 是一個(gè)優(yōu)雅的框架集合详幽,需要小心協(xié)調(diào)配置才能正確工作。但這種優(yōu)雅的代價(jià)是配置變得很復(fù)雜(別跟我提 XML)。

解決方案:Spring Boot

開(kāi)始介紹 Spring Boot。Spring Boot 網(wǎng)站 對(duì)它的介紹比我的簡(jiǎn)介更為簡(jiǎn)潔:

“Spring Boot 使您能輕松地創(chuàng)建獨(dú)立的柬泽、生產(chǎn)級(jí)的能扒、基于 Spring 且能直接運(yùn)行的應(yīng)用程序。我們對(duì) Spring 平臺(tái)和第三方庫(kù)有自己的看法剥险,所以您從一開(kāi)始只會(huì)遇到極少的麻煩∠苄ぃ”

基本上講表制,這意味著您只需極少的配置,就可以快速獲得一個(gè)正常運(yùn)行的 Spring 應(yīng)用程序控乾。這些極少的配置采用了注釋的形式么介,所以沒(méi)有 XML。

這一切聽(tīng)起來(lái)很不錯(cuò)蜕衡,對(duì)吧壤短?但 Spring Boot 到底是怎么工作的?

首先慨仿,它很有主見(jiàn)

Spring Boot 擁有觀點(diǎn)久脯。換句話說(shuō),Spring Boot 擁有合理的默認(rèn)值镶骗,所以您可以使用這些常用值快速構(gòu)建應(yīng)用程序桶现。

例如,Tomcat 是一個(gè)非常流行的 Web 容器鼎姊。默認(rèn)情況下骡和,Spring Boot Web 應(yīng)用程序使用了一個(gè)嵌入式 Tomcat 容器。

其次相寇,它可以自定義

如果無(wú)法改變其想法慰于,具有主見(jiàn)的框架就不是很好的框架。您可以根據(jù)自己的喜好輕松地自定義 Spring Boot 應(yīng)用程序唤衫,無(wú)論是在進(jìn)行初始配置時(shí)還是在開(kāi)發(fā)周期的后期階段婆赠。

例如,如果喜歡 Maven佳励,可以輕松地在 POM 文件中更改 <dependency> 來(lái)替換 Spring Boot 默認(rèn)值休里。教程后面會(huì)這么做。

開(kāi)始使用 Spring Boot

Starter

starter 是 Spring Boot 的一個(gè)重要組成部分赃承,用于限制您需要執(zhí)行的手動(dòng)配置依賴(lài)項(xiàng)數(shù)量妙黍。要想有效地使用 Spring Boot,您應(yīng)該了解 starter瞧剖。

starter 實(shí)際上是一組依賴(lài)項(xiàng)(比如 Maven POM)拭嫁,這些依賴(lài)項(xiàng)是 starter 所表示的應(yīng)用程序類(lèi)型所獨(dú)有的可免。

所有 starter 都使用以下命名約定:spring-boot-starter-XYZ,其中 XYZ 是想要構(gòu)建的應(yīng)用程序類(lèi)型做粤。以下是一些流行的 Spring Boot starter:

  • spring-boot-starter-**web** 用于構(gòu)建 RESTful Web 服務(wù)浇借,它使用 Spring MVC 和 Tomcat 作為嵌入式應(yīng)用程序容器。
  • spring-boot-starter-**jersey**spring-boot-starter-web 的一個(gè)替代怕品,它使用 Apache Jersey 而不是 Spring MVC妇垢。
  • spring-boot-starter-**jdbc** 用于建立 JDBC 連接池。它基于 Tomcat 的 JDBC 連接池實(shí)現(xiàn)肉康。

Spring Boot starter 參考頁(yè)面 還列出了其他許多 starter修己。您可以訪問(wèn)該頁(yè)面來(lái)了解每個(gè) starter 的 POM 和依賴(lài)項(xiàng)。

自動(dòng)配置

如果您允許的話迎罗,Spring Boot 會(huì)使用其 @EnableAutoConfiguration 注釋自動(dòng)配置您的應(yīng)用程序。自動(dòng)配置基于類(lèi)路徑中的 JAR 和定義 bean 的方式:

查看配置:使用 --debug 選項(xiàng)啟動(dòng)您的 Spring Boot 應(yīng)用程序片仿,然后將向控制臺(tái)生成一個(gè)自動(dòng)配置報(bào)告纹安。

  • Spring Boot 使用您在 CLASSPATH 中指定的 JAR,形成一個(gè)有關(guān)如何配置某個(gè)自動(dòng)行為的觀點(diǎn)砂豌。例如厢岂,如果類(lèi)路徑中有 H2 數(shù)據(jù)庫(kù) JAR,而且您沒(méi)有配置任何其他 DataSource bean阳距,您的應(yīng)用程序會(huì)自動(dòng)配置一個(gè)內(nèi)存型數(shù)據(jù)庫(kù)塔粒。
  • Spring Boot 使用您定義 bean 的方式來(lái)確定如何自動(dòng)配置自身。例如筐摘,如果您為 JPA bean 添加了 @Entity 注釋?zhuān)琒pring Boot 會(huì)自動(dòng)配置 JPA卒茬,這樣您就不需要 persistence.xml 文件。

Spring Boot über jar

Spring Boot 旨在幫助開(kāi)發(fā)人員創(chuàng)建能直接運(yùn)行的應(yīng)用程序咖熟。為實(shí)現(xiàn)該目的圃酵,它將應(yīng)用程序及其依賴(lài)項(xiàng)包裝在一個(gè)可執(zhí)行 JAR 中。要運(yùn)行您的應(yīng)用程序馍管,可以像這樣啟動(dòng) Java:

$ java -jar PATH_TO_EXECUTABLE_JAR/executableJar.jar

Spring Boot über JAR 不是一個(gè)新概念郭赐。因?yàn)?Java 沒(méi)有提供加載嵌套式 JAR 的標(biāo)準(zhǔn)方式,所以開(kāi)發(fā)人員多年來(lái)一直使用 Apache Maven Shade 插件 等工具來(lái)構(gòu)建 “shaded” JAR确沸。shaded JAR 僅包含來(lái)自應(yīng)用程序的所有依賴(lài) JAR 的 .class 文件捌锭。但隨著應(yīng)用程序復(fù)雜性的增加和依賴(lài)項(xiàng)的增多,shaded JAR 可能遇到兩個(gè)問(wèn)題:

  1. 名稱(chēng)沖突罗捎,不同 JAR 中的兩個(gè)類(lèi)采用了相同名稱(chēng)观谦。
  2. 依賴(lài)項(xiàng)版本問(wèn)題,兩個(gè) JAR 使用同一個(gè)依賴(lài)項(xiàng)的不同版本宛逗。

Spring Boot 解決這些問(wèn)題的方法是定義一種 特殊的 JAR 文件布局坎匿,其中的 JAR 本身嵌套在 über JAR 中。Spring 支持工具(例如 spring-boot-maven 插件)隨后會(huì)構(gòu)建這個(gè)可執(zhí)行的 über JAR,使其符合該布局(不只是像shaded JAR 一樣解包和重新打包 .class 文件)替蔬。運(yùn)行這個(gè)可執(zhí)行 JAR 時(shí)告私,Spring Boot 使用了一個(gè)特殊的類(lèi)加載器來(lái)處理嵌套式 JAR 中的類(lèi)。

編寫(xiě) Hello, World!

現(xiàn)在您已準(zhǔn)備好開(kāi)始直接使用 Spring Boot 了承桥。本節(jié)中的示例基于一個(gè)名為 HelloSpringBoot 的簡(jiǎn)單應(yīng)用程序驻粟。您可以和我一起練習(xí)這個(gè)應(yīng)用程序開(kāi)發(fā)示例,但是凶异,如果想立即開(kāi)始使用應(yīng)用程序代碼蜀撑,可以從 Github 下載它。

讓我們行動(dòng)起來(lái)剩彬,創(chuàng)建一個(gè)新的 Maven 項(xiàng)目酷麦!

1、創(chuàng)建 Maven 項(xiàng)目

在 Eclipse 中喉恋,轉(zhuǎn)到 File > New Project 并選擇 Maven > Maven Project沃饶,如圖 1 所示。

圖 1. 選擇一個(gè) Maven 項(xiàng)目
用于選擇 Maven 項(xiàng)目的 Eclipse New Project 對(duì)話框的屏幕截圖轻黑。

單擊 Next糊肤,在隨后的對(duì)話框中(未給出)再次單擊 Next。

您會(huì)被要求選擇新 Maven 項(xiàng)目的架構(gòu)類(lèi)型氓鄙。選擇 maven-archetype-quickstart馆揉,如圖 2 所示。

圖 2. 選擇 Maven quickstart 架構(gòu)類(lèi)型
用于選擇 Maven 快速啟動(dòng)架構(gòu)類(lèi)型的 New Project 對(duì)話框的屏幕截圖抖拦。

單擊 Next升酣。

最后,輸入工件設(shè)置态罪,如圖 3 所示拗踢。

圖 3. 選擇 Maven 工件設(shè)置
用于選擇 Maven 架構(gòu)類(lèi)型設(shè)置的 New Project 對(duì)話框的屏幕截圖。

我為 HelloSpringBoot 應(yīng)用程序使用了以下設(shè)置:

  • Group Id:com.makotojava.learn
  • Artifact Id:HelloSpringBoot
  • Version:1.0-SNAPSHOT
  • Package:com.makotojava.learn.hellospringboot

單擊 Finish 創(chuàng)建該項(xiàng)目向臀。

2巢墅、創(chuàng)建 POM

修改 New Project 向?qū)?chuàng)建的 POM,使其類(lèi)似于清單 1券膀。

清單 1. HelloSpringBoot 的 POM 文件
<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>
    <groupId>com.makotojava.learn</groupId>
    <artifactId>HelloSpringBoot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>HelloSpringBoot</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

請(qǐng)注意清單 1 中突出顯示的行:

第 10 至 14 行顯示了 <parent> 元素君纫,它指定了 Spring Boot 父 POM,并包含常見(jiàn)組件的定義芹彬。您不需要手動(dòng)配置這些組件蓄髓。

第 16 至 19 行顯示了 spring-boot-starter-web Spring Boot starter 上的 <dependency>。它們告訴 Spring Boot舒帮,該應(yīng)用程序是 Web 應(yīng)用程序会喝。Spring Boot 會(huì)相應(yīng)地形成自己的觀點(diǎn)陡叠。

第 25 至 30 行 告訴 Maven 使用 spring-boot-maven-plugin 插件生成該 Spring Boot 應(yīng)用程序。

配置不是太多肢执,對(duì)吧枉阵?請(qǐng)注意,這里沒(méi)有 XML预茄。我們使用 Java 注釋完成剩余配置兴溜。

進(jìn)一步了解 Spring Boot 的觀點(diǎn)

在進(jìn)一步介紹之前,我想再講講 Spring Boot 的觀點(diǎn)耻陕。換句話說(shuō)拙徽,我認(rèn)為有必要解釋一下 Spring Boot 如何使用 spring-boot-starter-web 等 starter 來(lái)形成自己的配置觀點(diǎn)。

示例應(yīng)用程序 HelloSpringBoot 使用了 Spring Boot 的 Web 應(yīng)用程序 starter spring-boot-starter-web诗宣”炫拢基于這個(gè) starter,Spring Boot 形成了該應(yīng)用程序的以下觀點(diǎn):

  • 使用 Tomcat 作為嵌入式 Web 服務(wù)器容器
  • 使用 Hibernate 進(jìn)行對(duì)象-關(guān)系映射 (ORM)
  • 使用 Apache Jackson 綁定 JSON
  • 使用 Spring MVC 作為 REST 框架

我們來(lái)講講主見(jiàn)召庞!據(jù) Spring Boot 辯解淳蔼,這些是最流行的 Web 應(yīng)用程序默認(rèn)設(shè)置 — 至少我一直在使用它們。

但是還記得我說(shuō)過(guò) Spring Boot 可以自定義嗎裁眯?如果您想使用不同的技術(shù)組合,可以輕松地覆蓋 Spring Boot 的默認(rèn)設(shè)置讳癌。

我們接下來(lái)將演示一種簡(jiǎn)單的自定義穿稳。

丟失 <parent>

如果您的 POM 中已有一個(gè) <parent> 元素,或者如果不想使用它晌坤,該怎么辦逢艘?Spring Boot 是否仍會(huì)正常運(yùn)行?

是的骤菠,它會(huì)正常運(yùn)行它改,但您需要做兩件事:

  1. 手動(dòng)添加依賴(lài)項(xiàng)(包括版本)

  2. spring-boot-maven-plugin 添加一個(gè)配置代碼段,如清單 2 所示:

    清單 2. 在不使用 <parent> POM 元素時(shí)商乎,指定 repackage 目標(biāo)
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.5.2.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

檢查依賴(lài)項(xiàng):如果您需要查看使用的 Spring Boot starter 拉入了哪些依賴(lài)項(xiàng)央拖,請(qǐng)?jiān)L問(wèn) Spring Boot starter 參考頁(yè)面

一定要注意鹉戚,Maven 的許多優(yōu)秀功能都是在 <parent> 元素中實(shí)現(xiàn)的鲜戒,所以如果您有合理的理由不使用它,繼續(xù)操作時(shí)務(wù)必小心抹凳。確保向spring-boot-maven-plugin 添加了一條 repackage 目標(biāo)執(zhí)行語(yǔ)句遏餐,這里提供了解釋

該項(xiàng)目已配置和自定義∮祝現(xiàn)在是時(shí)候構(gòu)建可執(zhí)行程序了失都。

3柏蘑、構(gòu)建可執(zhí)行 JAR

要使用 Maven 構(gòu)建可執(zhí)行 JAR,有兩種選擇:

  1. 在 Eclipse 中運(yùn)行 Maven 構(gòu)建
  2. 從命令行運(yùn)行 Maven 構(gòu)建

我將介紹如何實(shí)現(xiàn)這兩種方法粹庞。

在 Eclipse 中構(gòu)建

要在 Eclipse 中運(yùn)行 Maven 構(gòu)建咳焚,請(qǐng)右鍵單擊 POM 文件并選擇 Run As > Maven Build。在 Goals 文本字段中信粮,輸入 cleanpackage黔攒,然后單擊 Run 按鈕。

圖 4. 在 Eclipse 中構(gòu)建可執(zhí)行 JAR
在 Eclipse 中構(gòu)建可執(zhí)行的 JAR

您會(huì)在控制臺(tái)視圖中看到一條消息强缘,表明成功實(shí)現(xiàn)了構(gòu)建:

.
.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.440 s
[INFO] Finished at: 2017-04-16T10:17:21-05:00
[INFO] Final Memory: 30M/331M
[INFO] ------------------------------------------------------------------------

從命令行構(gòu)建

要從命令行運(yùn)行 Maven 構(gòu)建督惰,請(qǐng)打開(kāi) Mac 終端窗口或 Windows 命令提示,導(dǎo)航到 HelloSpringBoot 項(xiàng)目目錄旅掂,然后執(zhí)行以下命令:

mvn clean package

您會(huì)在終端窗口或命令提示中看到一條消息赏胚,表明成功實(shí)現(xiàn)了構(gòu)建。

$ cd HelloSpringBoot
$ pwd
/Users/sperry/home/HelloSpringBoot
$ mvn clean package
.
.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.440 s
[INFO] Finished at: 2017-04-16T10:17:21-05:00
[INFO] Final Memory: 30M/331M
[INFO] ------------------------------------------------------------------------
$

現(xiàn)在您已準(zhǔn)備好運(yùn)行這個(gè)可執(zhí)行 JAR 了商虐。

4觉阅、運(yùn)行可執(zhí)行 JAR

要運(yùn)行剛創(chuàng)建的可執(zhí)行 JAR,請(qǐng)打開(kāi) Mac 終端窗口或 Windows 命令提示秘车,導(dǎo)航到 HelloSpringBoot 項(xiàng)目文件夾典勇,然后執(zhí)行:

java -jar target/HelloSpringBoot-1.0-SNAPSHOT.jar

其中 target 是構(gòu)建的默認(rèn)輸出目錄。如果為它配置了不同的目錄叮趴,請(qǐng)?jiān)谏厦娴拿钪羞M(jìn)行相應(yīng)的替換割笙。

Spring Boot 的輸出包含一個(gè)文本式 “啟動(dòng)屏幕”(第 2 至 7 行),以及其他輸出眯亦,類(lèi)似于下面的清單伤溉。我僅展示了部分行,以便讓您了解在運(yùn)行該應(yīng)用程序時(shí)應(yīng)看到的內(nèi)容:

$ java -jar target/HelloSpringBoot-1.0-SNAPSHOT.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.2.RELEASE)
2017-04-15 17:46:12.919  INFO 20096 --- [           main] c.makotojava.learn.hellospringboot.App   : Starting App v1.0-SNAPSHOT on Ix.local with PID 20096 (/Users/sperry/home/projects/learn/HelloSpringBoot/target/HelloSpringBoot-1.0-SNAPSHOT.jar started by sperry in /Users/sperry/home/projects/learn/HelloSpringBoot)
2017-04-15 17:46:12.924 DEBUG 20096 --- [           main] c.makotojava.learn.hellospringboot.App   : Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE
.
.
2017-04-15 17:46:15.221  INFO 20096 --- [           main] c.makotojava.learn.hellospringboot.App   : Started App in 17.677 seconds (JVM running for 18.555)

如果應(yīng)用程序成功啟動(dòng)妻率,Spring Boot 輸出的最后一行會(huì)包含文字 “Started App”(第 13 行)÷夜耍現(xiàn)在您已準(zhǔn)備好體驗(yàn)自己的應(yīng)用程序了,我們接下來(lái)就會(huì)來(lái)體驗(yàn)它宫静。

5走净、體驗(yàn)該應(yīng)用程序

可以打開(kāi)瀏覽器并訪問(wèn)以下 URL,以便執(zhí)行 HelloSpringBoot 的單一 REST 方法:

http://localhost:8080/hello
圖 5. 開(kāi)始使用 Spring Boot孤里!
HelloSpringBoot Web 應(yīng)用程序的屏幕截圖温技。

如果看到文本 “Hello, All your base are belong to us”(視頻游戲 Zero Wing 的主頁(yè)),就會(huì)知道該應(yīng)用程序在正常運(yùn)行扭粱!

更改 Spring Boot 的觀點(diǎn)

Spring Boot 的觀點(diǎn)基于 POM 的內(nèi)容舵鳞,包括您在初步配置應(yīng)用程序時(shí)指定的 Spring Boot starter。形成有關(guān)想要構(gòu)建的應(yīng)用程序類(lèi)型的觀點(diǎn)后琢蛤,Spring Boot 會(huì)提供一組 Maven 依賴(lài)項(xiàng)蜓堕。圖 6 展示了 Spring Boot 在 Eclipse 中設(shè)置的一些 Maven 依賴(lài)項(xiàng)抛虏,它們基于 POM 內(nèi)容以及為 HelloSpringBoot 應(yīng)用程序指定的 starter:

圖 6. HelloSpringBoot 的初始依賴(lài)項(xiàng)
HelloSpringBoot 的默認(rèn)依賴(lài)配置。

請(qǐng)注意套才,Tomcat 是默認(rèn)的嵌入式 Web 服務(wù)器容器∮睾铮現(xiàn)在我們假設(shè)您不想使用 Tomcat,而是想使用 Jetty背伴。只需更改 POM 中的 <dependencies> 節(jié)(將清單 3 中第 5 至 15 行粘貼到 清單 1 中的第 19 行之前):

清單 3. 更改 POM 來(lái)使用 Jetty 代替 Tomcat
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

在下面可以注意到沸毁,Maven 的 Tomcat 依賴(lài)項(xiàng)消失了(得益于清單 3 中的第 5 至 10 行),取而代之的是 Jetty 依賴(lài)項(xiàng)(第 12 至 15 行)傻寂。

圖 7. 自定義的 HelloSpringBoot 依賴(lài)項(xiàng)
HelloSpringBoot 的自定義依賴(lài)配置息尺。

實(shí)際上,一張屏幕截圖無(wú)法顯示所有 Jetty 依賴(lài)項(xiàng)疾掰,但它們都包含在這里搂誉,而且 Tomcat 依賴(lài)項(xiàng)消失了。您可以自行嘗試并查看結(jié)果静檬!

創(chuàng)建復(fù)雜的應(yīng)用程序炭懊。

簡(jiǎn)單的示例雖然也能很好地展示 Spring Boot,但它能做的事情要多得多拂檩!在本節(jié)中侮腹,我將通過(guò)一個(gè) Spring MVC RESTful Web 應(yīng)用程序,介紹如何讓 Spring Boot 充分發(fā)揮作用稻励。要做的第一件事是設(shè)置新示例應(yīng)用程序 SpringBootDemo父阻。

SpringBootDemo

SpringBootDemo 是一個(gè) Spring Boot 包裝器,它包裝了一個(gè)名為 oDoT 的基于 Spring 的簡(jiǎn)單 POJO 應(yīng)用程序钉迷。(ToDo 中的反向排列……明白了嗎?)它的目的是練習(xí)開(kāi)發(fā)比簡(jiǎn)單 Hello, World 更復(fù)雜的應(yīng)用程序的過(guò)程钠署。您還會(huì)了解如何使用 Spring Boot 包裝一個(gè)現(xiàn)有的應(yīng)用程序糠聪。

要設(shè)置和運(yùn)行 SpringBootDemo,需要做 3 件事:

  1. 從 GitHub 獲取代碼谐鼎。
  2. 構(gòu)建并運(yùn)行可執(zhí)行 JAR舰蟆。
  3. 通過(guò) SoapUI 訪問(wèn)該應(yīng)用程序。

我創(chuàng)建了一個(gè)視頻來(lái)幫助引導(dǎo)您完成此過(guò)程的每一步±旯鳎現(xiàn)在可以啟動(dòng)該視頻了身害。

SpringBootDemo 演練

SpringBootDemo 演練

點(diǎn)擊查看視頻演示 查看抄本

1、獲取代碼

首先草戈,您需要從相應(yīng)的 GitHub 存儲(chǔ)庫(kù)克隆兩個(gè)項(xiàng)目塌鸯。第一個(gè)項(xiàng)目名為 odotCore,包含應(yīng)用程序的業(yè)務(wù)邏輯唐片,該項(xiàng)目編寫(xiě)為一個(gè)基于 Spring 的 POJO 應(yīng)用程序丙猬。另一個(gè)項(xiàng)目名為 SpringBootDemo涨颜,是一個(gè)圍繞 odotCore 的 Spring Boot 應(yīng)用程序包裝器。

要克隆 odotCore 存儲(chǔ)庫(kù)茧球,請(qǐng)打開(kāi)一個(gè) Mac 終端窗口或 Windows 命令提示庭瑰,導(dǎo)航到您想放入該代碼的根目錄,然后執(zhí)行以下命令:

git clone https://github.com/makotogo/odotCore

要克隆 SpringBootDemo 存儲(chǔ)庫(kù)抢埋,可執(zhí)行以下命令:

git clone https://github.com/makotogo/SpringBootDemo

請(qǐng)注意弹灭,兩個(gè)項(xiàng)目被直接放在應(yīng)用程序的根目錄下。接下來(lái)將代碼導(dǎo)入工作區(qū)中揪垄。

2穷吮、將代碼導(dǎo)入 Eclipse 中

轉(zhuǎn)到 File > Import... 并選擇 Maven > Existing Maven Projects

在下一個(gè)對(duì)話框中福侈,使用 Browse 按鈕導(dǎo)航到根目錄酒来。上一步中克隆的兩個(gè)項(xiàng)目都應(yīng)出現(xiàn)在對(duì)話框中,如下圖所示:

圖 8. 導(dǎo)入 Maven 項(xiàng)目
對(duì)話框的屏幕截圖:導(dǎo)入 Maven 項(xiàng)目肪凛。

單擊 Finish 將這些項(xiàng)目導(dǎo)入 Eclipse 工作區(qū)中堰汉。接下來(lái)將構(gòu)建可執(zhí)行 JAR。

3伟墙、構(gòu)建可執(zhí)行 JAR

要構(gòu)建 SpringBootDemo翘鸭,還需要構(gòu)建 odotCore 和 SpringBootDemo 項(xiàng)目〈量可以從命令行構(gòu)建這些項(xiàng)目就乓,就像在 HelloSpringBoot 應(yīng)用程序中所操作的那樣。在本例中拱烁,我將指導(dǎo)您使用 Eclipse生蚁。

在 Eclipse 中,右鍵單擊 odotCore 項(xiàng)目戏自。選擇 Run As > Maven Build邦投,指定 cleaninstall 目標(biāo)。install 目標(biāo)會(huì)將 odotCore-1.0-SNAPSHOT.jar JAR 文件安裝到本地 Maven 存儲(chǔ)庫(kù)中擅笔。在運(yùn)行 SpringBootDemo Maven 構(gòu)建時(shí)志衣,可從這里以依賴(lài)項(xiàng)形式拉入它。

odotCore Maven 構(gòu)建成功運(yùn)行后猛们,右鍵單擊 SpringBootDemo 項(xiàng)目念脯,選擇 Run As > Maven Build,然后指定 cleanpackage 目標(biāo)弯淘。

備注:odotCore 項(xiàng)目包含多個(gè)單元測(cè)試绿店。盡管我從不建議跳過(guò)單元測(cè)試,但您可以設(shè)置在 Eclipse 中構(gòu)建 odotCore 項(xiàng)目的運(yùn)行配置庐橙,讓其跳過(guò)這些測(cè)試(Run Configuration 對(duì)話框上有一個(gè)對(duì)應(yīng)的復(fù)選框)惯吕。

成功構(gòu)建 SpringBootDemo 后惕它,可以從命令行運(yùn)行 SpringBootDemo über JAR。

4废登、運(yùn)行可執(zhí)行 JAR

從 Mac 終端窗口或 Windows 命令提示中導(dǎo)航到 SpringBootDemo 目錄淹魄。假設(shè)構(gòu)建輸出目錄名為 target(這是默認(rèn)設(shè)置),執(zhí)行以下命令:

java -jar target/SpringBootDemo-1.0-SNAPSHOT.jar

現(xiàn)在靜候 Spring Boot 運(yùn)行該應(yīng)用程序堡距。當(dāng)看到文本 “App Started” 時(shí)甲锡,就可以體驗(yàn)該應(yīng)用程序了。

5羽戒、體驗(yàn)該應(yīng)用程序

作為一次快速冒煙測(cè)試缤沦,為了確保您的應(yīng)用程序正常運(yùn)行,可打開(kāi)一個(gè)瀏覽器窗口并輸入以下 URL:

http://localhost:8080/CategoryRestService/FindAll

這會(huì)訪問(wèn) CategoryRestServiceFindAll 方法易稠,以 JSON 格式返回?cái)?shù)據(jù)庫(kù)中的所有 Category 對(duì)象缸废。

圖 9. 通過(guò)瀏覽器訪問(wèn) SpringBootDemo
通過(guò)瀏覽器訪問(wèn) SpringBootDemo 應(yīng)用程序。

也可以通過(guò) SoapUI 體驗(yàn)該應(yīng)用程序驶社。我不會(huì)演示該如何做企量,但本教程的視頻中介紹了該過(guò)程。

表 1 給出了 SpringBootDemo 的每個(gè)服務(wù)中的服務(wù)和方法亡电。

表 1. oDoT (SpringBootDemo) 服務(wù)和方法
服務(wù) 方法 HTTP 方法 示例 URL @ http://localhost:8080
類(lèi)別 FindAll GET /CategoryRestService/FindAll
類(lèi)別 FindById GET /CategoryRestService/FindbyId/1
類(lèi)別 FindById GET /CategoryRestService/FindbyName/MY_CATEGORY
類(lèi)別 Add PUT /CategoryRestService/Add
類(lèi)別 更新 POST /CategoryRestService/Update
類(lèi)別 刪除 DELETE /CategoryRestService/Delete
項(xiàng) FindAll GET /ItemRestService/FindAll
項(xiàng) FindById GET /ItemRestService/FindbyId/1
項(xiàng) FindById GET /ItemRestService/FindbyName/TODO_ITEM_1
項(xiàng) Add PUT /ItemRestService/Add
項(xiàng) Update POST /ItemRestService/Update
項(xiàng) Delete DELETE /ItemRestService/Delete

建議研究該代碼届巩,試用它,以便更深入地了解 Spring Boot 的工作原理份乒。

結(jié)束語(yǔ)

本教程介紹了 Spring Boot 解決的問(wèn)題恕汇,并簡(jiǎn)要介紹了它的工作原理。然后我演練了設(shè)置和運(yùn)行一個(gè)簡(jiǎn)單的 Spring Boot 應(yīng)用程序 HelloSpringBoot 的過(guò)程或辖。最后展示了如何使用 Spring Boot 構(gòu)建和體驗(yàn) Spring MVC RESTful Web 服務(wù)應(yīng)用程序瘾英。

那么您接下來(lái)會(huì)怎么做?

作者:J Steven Perry
原文地址:https://www.ibm.com/developerworks/cn/java/j-spring-boot-basics-perry/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颂暇,一起剝皮案震驚了整個(gè)濱河市缺谴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟀架,老刑警劉巖瓣赂,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榆骚,死亡現(xiàn)場(chǎng)離奇詭異片拍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妓肢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)捌省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碉钠,你說(shuō)我怎么就攤上這事纲缓【砭校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵祝高,是天一觀的道長(zhǎng)栗弟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)工闺,這世上最難降的妖魔是什么乍赫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮陆蟆,結(jié)果婚禮上雷厂,老公的妹妹穿的比我還像新娘。我一直安慰自己叠殷,他們只是感情好改鲫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著林束,像睡著了一般像棘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诊县,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天讲弄,我揣著相機(jī)與錄音,去河邊找鬼依痊。 笑死避除,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胸嘁。 我是一名探鬼主播瓶摆,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼性宏!你這毒婦竟也來(lái)了群井?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤毫胜,失蹤者是張志新(化名)和其女友劉穎书斜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體酵使,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荐吉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了口渔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片样屠。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痪欲,到底是詐尸還是另有隱情悦穿,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布业踢,位于F島的核電站栗柒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏知举。R本人自食惡果不足惜傍衡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望负蠕。 院中可真熱鬧蛙埂,春花似錦、人聲如沸遮糖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欲账。三九已至屡江,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赛不,已是汗流浹背惩嘉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踢故,地道東北人文黎。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像殿较,于是被迫代替她去往敵國(guó)和親耸峭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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