進(jìn)入spring boot官網(wǎng)并使用360瀏覽器翻譯插件翻譯后吱窝,(所有斜體字都是自動(dòng)翻譯或者根據(jù)官網(wǎng)英語(yǔ)推測(cè)的)首先看到的就是標(biāo)題Spring Boot參考指南揍鸟,隨后就是一堆作者和版權(quán),作者名字很多咽弦,可惜一個(gè)都不認(rèn)識(shí),看下面的版權(quán)說(shuō)明
本文件的副本可供您自己使用和分發(fā)給他人,前提是您不對(duì)此類副本收取任何費(fèi)用响蓉,并且每份副本均包含本版權(quán)聲明酷含,無(wú)論是以印刷版還是電子版分發(fā)鄙早。
所以只要我不收費(fèi)就可以隨意查看和分享這份參考指南汪茧,真是太棒了!接下來(lái)是目錄限番,第一部分主要講解的是springboot的概述陆爽,沒興趣,直接第二部分扳缕,也就是getting started(翻譯過(guò)來(lái)是入門)慌闭。
首先是介紹Spring Boot,翻譯后的內(nèi)容有些不通順躯舔,所以修改了一下:
介紹Spring Boot
Spring Boot可以輕松的創(chuàng)建可獨(dú)立運(yùn)行的生產(chǎn)級(jí)的基于Spring的應(yīng)用程序驴剔。我們對(duì)Spring平臺(tái)和第三方庫(kù)進(jìn)行了一種通用的配置,這樣您就可以輕松上手了粥庄。大多數(shù)Spring Boot應(yīng)用程序只需要很少的Spring配置丧失。
您可以使用Spring Boot創(chuàng)建Java應(yīng)用程序 ,它可以使用java -jar或更傳統(tǒng)的war包來(lái)部署啟動(dòng)惜互。我們還提供了一個(gè)運(yùn)行“spring scripts”的命令行工具布讹。
我們的主要目標(biāo)是:
為所有Spring開發(fā)提供從根本上更快且可廣泛訪問(wèn)的入門方案。
開箱即用训堆,隨著需求開始而迅速擺脫困境描验。
提供大型項(xiàng)目(例如嵌入式服務(wù)器,安全性坑鱼,度量標(biāo)準(zhǔn)膘流,運(yùn)行狀況檢查和外部化配置)通用的一系列非功能性特性。
絕對(duì)沒有代碼生成鲁沥,也不需要XML配置呼股。
好,我就信了你的鞋画恰,只要看到xml配置的地方全部跳過(guò)彭谁。
系統(tǒng)要求
Spring Boot 2.1.6.RELEASE需要Java 8,并且與Java 11兼容(包括在內(nèi))允扇。?還需要Spring Framework 5.1.8.RELEASE或更高版本缠局。以下構(gòu)建工具提供了顯式構(gòu)建支持:
Build ToolVersion
Maven3.3+
Gradle4.4+
Servlet容器? ?Spring Boot支持以下嵌入式servlet容器:
NameServlet Version
Tomcat 9.04.0
Jetty 9.43.1
Undertow 2.04.0
您還可以將Spring Boot應(yīng)用程序部署到任何Servlet 3.1+兼容容器。
通常用到的是maven加Tomcat蔼两,這兩個(gè)要好好學(xué)甩鳄。
安裝Spring Boot
Spring Boot可以與“通用”Java開發(fā)工具一起使用,也可以作為命令行工具安裝额划。無(wú)論哪種方式妙啃,您都需要Java SDK v1.8或更高版本。在開始之前,您應(yīng)該使用以下命令檢查當(dāng)前的Java安裝:
$ java -version
如果您不熟悉Java開發(fā)揖赴,或者想要嘗試Spring Boot馆匿,則可能需要先嘗試Spring Boot CLI(命令行界面)。否則燥滑,請(qǐng)繼續(xù)閱讀“通用”安裝說(shuō)明渐北。
這里必須說(shuō)明一下,本次學(xué)習(xí)涉及范圍不大铭拧,也不想拓寬其他知識(shí)赃蛛,所以只使用通用的maven來(lái)說(shuō)明如何安裝,其他方式的安裝也有介紹搀菩,包括最原始的方法直接導(dǎo)入jar包呕臂,也包括使用新的構(gòu)建工具Gradle來(lái)安裝,使用Spring Boot CLI命令行安裝肪跋,SDKMAN安裝歧蒋,OSX Homebrew安裝(Mac),MacPorts安裝(Mac)州既,Windows Scoop安裝谜洽,以及如何從早期版本的Spring Boot升級(jí)到最新的版本里面都有一定的介紹,這些普通公司用的不多吴叶,初學(xué)者沒時(shí)間也沒精力去探險(xiǎn)阐虚。
Maven安裝
Spring Boot與Apache Maven 3.3或更高版本兼容。如果您還沒有安裝Maven晤郑,可以按照maven.apache.org上的說(shuō)明進(jìn)行操作敌呈。
在許多操作系統(tǒng)上贸宏,Maven可以與軟件包管理器一起安裝造寝。如果您使用OSX Homebrew,請(qǐng)嘗試brew install maven吭练。Ubuntu用戶可以運(yùn)行sudo apt-get install maven诫龙。使用Chocolatey的?Windows用戶可以使用命令choco install maven運(yùn)行安裝。
Spring Boot依賴項(xiàng)使用org.springframework.boot?groupId鲫咽。通常签赃,您的Maven POM文件繼承自spring-boot-starter-parent項(xiàng)目并聲明對(duì)一個(gè)或多個(gè)“Starters”的依賴關(guān)系。Spring Boot還提供了一個(gè)可選的?Maven插件來(lái)創(chuàng)建可執(zhí)行jar分尸。
以下清單顯示了一個(gè)典型pom.xml文件內(nèi)容:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? <modelVersion>4.0.0</modelVersion>
? ? <groupId>com.example</groupId>
? ? <artifactId>myproject</artifactId>
? ? <version>0.0.1-SNAPSHOT</version>
? ? <!-- 從springboot父模塊中繼承默認(rèn)啟動(dòng)配置 -->
? ? <parent>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? <version>2.1.6.RELEASE</version>
? ? </parent>
? ? <!-- 為網(wǎng)絡(luò)程序添加基本依賴 -->
? ? <dependencies>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? ? ? </dependency>
? ? </dependencies>
? ? <!-- 打包為可執(zhí)行jar包 -->
? ? <build>
? ? ? ? <plugins>
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? </plugin>
? ? ? ? </plugins>
? ? </build>
</project>
這里導(dǎo)入的spring-boot-starter-parent父模塊是使用Spring Boot的好方法锦聊,但它可能并不適合所有情況箩绍。有時(shí)您可能需要從不同的父POM繼承孔庭,或者您可能不喜歡我們的默認(rèn)設(shè)置。在這些情況下,請(qǐng)參見?第13.2.2節(jié)“使用沒有父POM的Spring Boot”來(lái)獲得使用import?范圍的替代解決方案圆到。
這里開始使用maven構(gòu)建項(xiàng)目怎抛,如果不明白不要問(wèn),自己百度maven簡(jiǎn)單示例芽淡。
開發(fā)您的第一個(gè)Spring Boot應(yīng)用程序
本節(jié)介紹如何開發(fā)一個(gè)簡(jiǎn)單的“Hello World马绝!”Web應(yīng)用程序,該應(yīng)用程序突出了Spring Boot的一些主要功能挣菲。我們使用Maven來(lái)構(gòu)建這個(gè)項(xiàng)目富稻,因?yàn)榇蠖鄶?shù)IDE都支持它。
在開始之前白胀,打開終端并運(yùn)行以下命令以確保安裝了有效的Java和Maven版本:
$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
此示例需要在其自己的文件夾中創(chuàng)建唉窃。后續(xù)說(shuō)明假定您已創(chuàng)建了一個(gè)合適的文件夾,并且它是您當(dāng)前的目錄纹笼。
創(chuàng)建POM文件
我們需要從創(chuàng)建Maven pom.xml文件開始纹份。本pom.xml是用來(lái)構(gòu)建項(xiàng)目的依賴關(guān)系說(shuō)明。打開您喜歡的文本編輯器并添加以下內(nèi)容:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? <modelVersion>4.0.0</modelVersion>
? ? <groupId>com.example</groupId>
? ? <artifactId>myproject</artifactId>
? ? <version>0.0.1-SNAPSHOT</version>
? ? <parent>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? <version>2.1.6.RELEASE</version>
? ? </parent>
? ? <!-- 當(dāng)有其他pom內(nèi)容需要添加時(shí)放到這里... -->
</project>
上面的內(nèi)容應(yīng)該為您提供有效的構(gòu)建廷痘。您可以通過(guò)運(yùn)行來(lái)測(cè)試它mvn package(現(xiàn)在蔓涧,您可以忽略“jar將為空”的相關(guān)警告)。
此時(shí)笋额,您可以將項(xiàng)目導(dǎo)入IDE(大多數(shù)現(xiàn)代Java IDE(eclipse元暴,idea較常用)包括對(duì)Maven的內(nèi)置支持)。為簡(jiǎn)單起見兄猩,我們繼續(xù)為此示例使用純文本編輯器茉盏。
添加類路徑依賴關(guān)系
Spring Boot提供了許多“Starters”,可以將jar添加到類路徑中枢冤。我們的示例應(yīng)用程序已經(jīng)spring-boot-starter-parent在parent POM部分中使用過(guò)鸠姨。spring-boot-starter-parent是一個(gè)特殊的啟動(dòng)器,提供有用的Maven默認(rèn)值淹真。它還提供了一個(gè)依賴部分讶迁,以便您可以省略版本號(hào)的說(shuō)明。
其他“Starters”提供了在開發(fā)特定類型的應(yīng)用程序時(shí)可能需要的依賴項(xiàng)核蘸。由于我們正在開發(fā)Web應(yīng)用程序巍糯,因此我們添加了 spring-boot-starter-web依賴項(xiàng)。在此之前客扎,我們可以通過(guò)運(yùn)行以下命令來(lái)查看當(dāng)前的內(nèi)容:
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
該mvn dependency:tree命令打印項(xiàng)目依賴項(xiàng)的樹表示祟峦。您可以看到它spring-boot-starter-parent本身不提供依賴關(guān)系。要添加必要的依賴項(xiàng)徙鱼,請(qǐng)編輯pom.xml文件宅楞,并在spring-boot-starter-web該parent部分下方添加依賴項(xiàng),示例:
<dependencies>
? ? <dependency>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? </dependency>
</dependencies>
如果mvn dependency:tree再次運(yùn)行,您會(huì)發(fā)現(xiàn)現(xiàn)在有許多其他依賴項(xiàng)咱筛,包括Tomcat Web服務(wù)器和Spring Boot本身搓幌。
編寫代碼
要完成我們的應(yīng)用程序,我們需要?jiǎng)?chuàng)建一個(gè)Java文件迅箩。默認(rèn)情況下溉愁,Maven編譯源代碼的路徑是src/main/java,因此您需要?jiǎng)?chuàng)建該文件夾結(jié)構(gòu)饲趋,然后添加一個(gè)名為src/main/java/Example.java且包含以下代碼的文件:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
? ? @RequestMapping("/")
? ? String home() {
? ? ? ? return "Hello World!";
? ? }
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(Example.class, args);
? ? }
}
雖然這里的代碼不多拐揭,但還是有很多代碼。我們將在接下來(lái)的幾節(jié)中逐步介紹重要部分奕塑。
@RestController和@RequestMapping Annotations 注解說(shuō)明
在Example類上的第一個(gè)注解是@RestController堂污。這被稱為構(gòu)造型注釋。它為閱讀代碼的人提供了提示龄砰,而為Spring提供了特定角色的提示盟猖。在這種情況下,我們的類是一個(gè)Web @Controller换棚,因此Spring在處理傳入的Web請(qǐng)求時(shí)會(huì)考慮它式镐。
該@RequestMapping注釋提供“路由”的信息。它告訴Spring固蚤,任何帶/路徑的HTTP請(qǐng)求都應(yīng)該映射到該home方法娘汞。該 @RestController注解告訴Spring使得到的字符串直接返回給調(diào)用者。
在@RestController與@RequestMapping注解是Spring MVC的注解夕玩。(它們不是Spring Boot特有的你弦。)有關(guān)更多詳細(xì)信息,請(qǐng)參閱Spring參考文檔中的MVC部分燎孟。
這段話的意思是要想會(huì)用web還要學(xué)Spring MVC里面的知識(shí)
@EnableAutoConfiguration注解
第二個(gè)類級(jí)注解是@EnableAutoConfiguration禽作。這個(gè)注解告訴Spring Boot根據(jù)你添加的jar依賴關(guān)系“猜測(cè)”你想要如何配置Spring。自從spring-boot-starter-web添加了Tomcat和Spring MVC 以來(lái)缤弦,自動(dòng)配置假定您正在開發(fā)Web應(yīng)用程序并相應(yīng)地設(shè)置Spring领迈。
啟動(dòng)器和自動(dòng)配置
自動(dòng)配置旨在與“啟動(dòng)器”配合使用,但這兩個(gè)概念并不直接相關(guān)碍沐。您可以自由選擇并在starter依賴之外的jar依賴項(xiàng)。同時(shí)Spring Boot仍然盡力自動(dòng)配置您的應(yīng)用程序衷蜓。
“主”方法
我們的應(yīng)用程序的最后一部分是main方法累提。這只是遵循應(yīng)用程序入口點(diǎn)的Java約定的標(biāo)準(zhǔn)方法。我們的main方法SpringApplication通過(guò)調(diào)用委托給Spring Boot的類run磁浇。 SpringApplication引導(dǎo)我們的應(yīng)用程序斋陪,啟動(dòng)Spring,然后啟動(dòng)自動(dòng)配置的Tomcat Web服務(wù)器。我們需要Example.class作為參數(shù)傳遞給run方法无虚,以告訴SpringApplication哪個(gè)是主要的Spring組件缔赠。該 args數(shù)組也被傳遞以公開任何命令行參數(shù)。
運(yùn)行示例
此時(shí)友题,您的應(yīng)用程序應(yīng)該工作嗤堰。由于您使用了 spring-boot-starter-parent POM,run因此您可以使用一個(gè)有用的目標(biāo)來(lái)啟動(dòng)應(yīng)用程序度宦。mvn spring-boot:run從根項(xiàng)目目錄中鍵入以啟動(dòng)應(yīng)用程序踢匣。您應(yīng)該看到類似于以下內(nèi)容的輸出:
$ mvn spring-boot:run
如果您打開Web瀏覽器訪問(wèn) localhost:8080,您應(yīng)該看到以下輸出:
Hello World!
要正常退出應(yīng)用程序戈抄,請(qǐng)按組合按鍵 ctrl-c离唬。
創(chuàng)建一個(gè)可執(zhí)行的Jar
我們通過(guò)創(chuàng)建一個(gè)完全自包含的可執(zhí)行jar文件來(lái)完成我們的示例,我們可以在生產(chǎn)中運(yùn)行它划鸽∈漭海可執(zhí)行jar(有時(shí)稱為“fat jar”)是包含已編譯類以及代碼需要運(yùn)行的所有jar依賴項(xiàng)的歸檔。
可執(zhí)行的jar和Java
Java沒有提供加載嵌套jar文件的標(biāo)準(zhǔn)方法(jar文件本身包含在jar中)裸诽。如果您要分發(fā)自包含的應(yīng)用程序模闲,這可能會(huì)有問(wèn)題。
為了解決這個(gè)問(wèn)題崭捍,許多開發(fā)人員使用“超級(jí)”罐子尸折。uber jar將所有應(yīng)用程序依賴項(xiàng)中的所有類打包到一個(gè)存檔中。這種方法的問(wèn)題在于很難看出您的應(yīng)用程序中有哪些庫(kù)殷蛇。如果在多個(gè)罐子中使用相同的文件名(但具有不同的內(nèi)容)实夹,也可能會(huì)有問(wèn)題。
Spring Boot采用不同的方法粒梦,讓您直接嵌套jar亮航。
要?jiǎng)?chuàng)建可執(zhí)行jar,我們需要添加spring-boot-maven-plugin到我們的 pom.xml匀们。為此缴淋,請(qǐng)?jiān)谠揹ependencies部分下方插入以下行:
<build>
? ? <plugins>
? ? ? ? <plugin>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? </plugin>
? ? </plugins>
</build>
所述spring-boot-starter-parent POM包括<executions>配置以結(jié)合repackage目標(biāo)。如果您不使用父POM泄朴,則需要自己聲明此配置重抖。有關(guān)詳細(xì)信息,請(qǐng)參閱插件文檔祖灰。
保存pom.xml并從命令行運(yùn)行mvn package钟沛,如下所示:
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.6.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果你查看target目錄,你應(yīng)該看到myproject-0.0.1-SNAPSHOT.jar局扶。該文件大小應(yīng)為10 MB左右恨统。如果你想偷看內(nèi)部叁扫,你可以使用jar tvf,如下:
$ jar tvf target / myproject-0.0.1-SNAPSHOT.jar
您還應(yīng)該看到目錄中命名myproject-0.0.1-SNAPSHOT.jar.original的文件小得多target畜埋。這是Maven在Spring Boot重新打包之前創(chuàng)建的原始jar文件莫绣。
要運(yùn)行該應(yīng)用程序,請(qǐng)使用以下java -jar命令:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
和以前一樣悠鞍,要退出應(yīng)用程序对室,請(qǐng)按ctrl-c。