Part II.開(kāi)始使用(GettingStarted)
如果您正開(kāi)始使用SpringBoot
,或者一般的Spring
重罪,請(qǐng)先閱讀本部分樱哼。它回答了基本的“是什么?””哀九、“如何?”和“為什么?”的問(wèn)題。它包括對(duì)SpringBoot
的介紹搅幅,以及安裝說(shuō)明阅束。然后,我們將帶您構(gòu)建您的第一個(gè)SpringBoot
應(yīng)用程序茄唐,同時(shí)介紹一些核心概念息裸。
8. SpringBoot簡(jiǎn)介(IntroducingSpringBoot)
SpringBoot
使創(chuàng)建可以運(yùn)行的獨(dú)立的、基于spring
的產(chǎn)品級(jí)應(yīng)用程序變得很容易琢融。我們對(duì)Spring
平臺(tái)和第三方庫(kù)有自己的集成方式界牡,這樣您就可以以最少的配置開(kāi)始構(gòu)建Spring
應(yīng)用。大多數(shù)SpringBoot
應(yīng)用程序只需要很少的Spring配置漾抬。
您可以使用SpringBoot
創(chuàng)建可以通過(guò)使用Java-jar
或更傳統(tǒng)的war部署啟動(dòng)的Java應(yīng)用程序宿亡。我們還提供了一個(gè)運(yùn)行springscripts
的命令行工具。
我們有如下主要目標(biāo):
- 為所有Spring開(kāi)發(fā)工作提供一個(gè)非衬闪睿快的挽荠、廣泛可訪問(wèn)的初始體驗(yàn)。
- Beopinionatedoutoftheboxbutgetoutofthewayquicklyasrequirementsstarttodivergefromthedefaults.
- 提供對(duì)大型項(xiàng)目類(如嵌入式服務(wù)器平绩、安全性圈匆、度量、健康檢查和外部化配置)常見(jiàn)的一系列非功能性特性捏雌。
- 不需要代碼生成硬編碼配置跃赚,也不需要XML配置。
9. 系統(tǒng)環(huán)境要求(SystemRequirements)
SpringBoot2.1.1.RELEASE要求Java8以上版本性湿,并且兼容Java11(包括在內(nèi))纬傲,兼容SpringFramework5.1.3.RELEASE以上版本
以下是構(gòu)建工具版本要求:
構(gòu)建工具 | 版本號(hào) |
---|---|
Maven | 3.3+ |
Gradle | 4.4+ |
9.1 Servlet容器(ServletContainers)
SpringBoot支持以下嵌入式Servlet容器:
容器 | Servlet版本號(hào) |
---|---|
Tomcat9.0 | 4.0 |
Jetty9.4 | 3.1 |
Undertow2.0 | 4.0 |
你也可以將SpringBoot應(yīng)用程序發(fā)不到Servlet3.1+的容器中運(yùn)行。
10. 安裝SpringBoot(InstallingSpringBoot)
SpringBoot可以與“經(jīng)典”Java開(kāi)發(fā)工具一起使用肤频,也可以作為命令行工具安裝叹括。無(wú)論哪種方式,您都需要JavaSDKv1.8或更高版本宵荒。在開(kāi)始之前汁雷,您應(yīng)該使用以下命令檢查當(dāng)前的Java安裝:
$java-version
如果您是Java開(kāi)發(fā)新手,或者您想嘗試使用SpringBoot报咳,您可能想先嘗試SpringBootCLI(命令行接口)侠讯。否則,請(qǐng)繼續(xù)閱讀“經(jīng)典”安裝說(shuō)明暑刃。
10.1 安裝介紹(InstallationInstructionsfortheJavaDeveloper)
您可以像使用任何標(biāo)準(zhǔn)Java庫(kù)一樣使用SpringBoot继低。請(qǐng)引入適當(dāng)版本的spring-boot-* 到classpash。SpringBoot不需要任何特殊的工具集成稍走,所以您可以使用任何IDE或文本編輯器袁翁。此外柴底,SpringBoot應(yīng)用程序沒(méi)有什么特別之處,所以您可以像運(yùn)行其他任何Java程序一樣運(yùn)行和調(diào)試SpringBoot應(yīng)用程序粱胜。
盡管您可以復(fù)制SpringBootjar包柄驻,但我們還是建議您使用依賴管理工具(例如Maven或Gradle)。
10.1.1 通過(guò)Maven安裝(MavenInstallation)
SpringBoot需要ApacheMaven3.3或更高版本焙压。如果您還沒(méi)有安裝Maven鸿脓,可以按照maven.apache.org上的說(shuō)明先安裝maven。
在許多操作系統(tǒng)上涯曲,Maven可以與包管理器一起安裝野哭。如果您使用OSX系統(tǒng)Homebrew,請(qǐng)嘗試使用
brewinstallmaven
幻件。Ubuntu用戶可以運(yùn)行sudoapt-getinstallmaven
安裝maven拨黔。在Windows上可以使用Chocolatey以管理員運(yùn)行chocoinstallmaven
安裝Maven。
SpringBoot依賴項(xiàng)使用org.springframework.boot
groupId
引入绰沥。通常篱蝇,Maven文件繼承自spring-boot-start-parent
項(xiàng)目,并聲明一個(gè)或多個(gè)“啟動(dòng)者”的依賴徽曲。SpringBoot還提供了一個(gè)可選的Maven插件來(lái)創(chuàng)建可執(zhí)行jar零截。
下面的程序清單給出了一個(gè)典型的.xml文件:
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org//4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org//4.0.0http://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>
<!--InheritdefaultsfromSpringBoot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<!--Addtypicaldependenciesforawebapplication-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--Packageasanexecutablejar-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
10.1.2 通過(guò)Gradle安裝(GradleInstallation)
SpringBoot與Gradle4.4以上版本兼容。如果您還沒(méi)有安裝Gradle秃臣,可以按照gradle.org說(shuō)明安裝涧衙。
可以使用org.springframework.boot``group
聲明SpringBoot依賴項(xiàng),通常一個(gè)SpringBoot項(xiàng)目會(huì)依賴一個(gè)或多個(gè)“Starter”奥此,SpringBoot提供了一個(gè)有用的Gradle插件绍撞,可以用來(lái)簡(jiǎn)化依賴聲明和創(chuàng)建可執(zhí)行jar包。
Gradle包裝
Gradle包裝器提供了一種很好的“獲取”Gradle的方法用于構(gòu)建一個(gè)項(xiàng)目得院。它本質(zhì)上是一個(gè)小腳本和庫(kù),您可以將其與代碼一起提交章贞,以引導(dǎo)構(gòu)建過(guò)程祥绞。詳情請(qǐng)參考[docs.gradle.org/4.2.1/userguide/gradle_wrapper.html`(https://docs.gradle.org/4.2.1/userguide/gradle_wrapper.html)。
更多關(guān)于使用Gradle構(gòu)建SpringBoot項(xiàng)目的細(xì)節(jié)可以在Gradle的“插件向?qū)?/a>”找到
10.2 安裝使用SpringBootCLI(InstallingtheSpringBootCLI)
SpringBootCLI(命令行接口)是一個(gè)命令行工具鸭限,您可以使用它快速地用構(gòu)建Spring原型蜕径。可以用它執(zhí)行Groovy腳本败京,這意味著您可以在不需要了解太多樣板代碼的情況下就可以使用熟悉的類java的語(yǔ)法構(gòu)建SpringBoot兜喻。
您不需要使用CLI來(lái)與SpringBoot一起工作,但是它絕對(duì)是啟動(dòng)Spring應(yīng)用程序的最快方法赡麦。
10.2.1 手動(dòng)安裝(ManualInstallation)
你可以通過(guò)以下方式安裝SpringCLI二進(jìn)制發(fā)行包:
你也可以使用最新的快照版本朴皆。
下載完成之后帕识,按照解壓包中的INSTALL.txt
說(shuō)明進(jìn)行操作∷煺。總之肮疗,在.zip
包中的的bin/
目錄下有一個(gè)spring
腳本(針對(duì)Windows有一個(gè)spring.bat
腳本),這個(gè)腳本可以幫助你檢查classpath是否安裝正確扒接。
10.2.2 通過(guò)SDKMAN安裝
SDKMAN!(TheSoftwareDevelopmentKitManager)可以用來(lái)管理多個(gè)二進(jìn)制SDK發(fā)行包伪货。包括Groovy和SpringBootCLI〖卣可以通過(guò)sdkman.io獲取SDKMAN!碱呼,并按以下步驟安裝SpringBoot:
$sdkinstallspringboot
$spring--version
SpringBootv2.1.1.RELEASE
如果您為CLI開(kāi)發(fā)特性,并希望輕松訪問(wèn)構(gòu)建的版本宗侦,請(qǐng)使用以下命令:
$sdkinstallspringbootdev/path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.1.1.RELEASE-bin/spring-2.1.1.RELEASE/
$sdkdefaultspringbootdev
$spring--version
SpringCLIv2.1.1.RELEASE
前面的說(shuō)明用于安裝一個(gè)名為spring的dev本地實(shí)例愚臀。用于指向您的項(xiàng)目構(gòu)建位置,因此每次重新構(gòu)建SpringBoot時(shí)凝垛,Spring都是最新的懊悯。
你可以使用如下命令查看它們:
$sdklsspringboot
================================================================================
AvailableSpringbootVersions
================================================================================
>+dev
* 2.1.1.RELEASE
================================================================================
+-localversion
* -installed
>-currentlyinuse
================================================================================
10.2.3 OSXHomebrew安裝流程(OSXHomebrewInstallation)
如果你使用的是Mac并且安裝了Homebrew包管理工具,你可以使用如下命令安裝SpringCLI:
$brewtappivotal/tap
$brewinstallspringboot
Homebrew安裝spring
到/usr/local/bin
下梦皮。
brew的安裝可能出現(xiàn)過(guò)時(shí)炭分。在這種情況下,運(yùn)行
brewupdate
并重試剑肯。
10.2.4 MacPorts安裝流程(MacPortsInstallation)
如果您在Mac上使用MacPorts捧毛,可以使用以下命令安裝SpringBootCLI:
$sudoportinstallspring-boot-cli
10.2.5 命令行使用SpringBootCLI(Command-lineCompletion)
SpringBootCLI包含為BASH
和zshshell
提供命令初始化的腳本。您可以在任何shell中獲取腳本让网,或者將其放入您的個(gè)人或系統(tǒng)范圍的bash完成初始化呀忧。在Debian系統(tǒng)上交惯,系統(tǒng)范圍的腳本位于/shell-completion/bash
中滥壕,該目錄中的所有腳本都在新的shell啟動(dòng)時(shí)執(zhí)行。例如留拾,如果您已經(jīng)使用SDKMAN安裝了該腳本因篇,可以手動(dòng)運(yùn)行該腳本!泞辐,使用以下命令:
$.~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$spring<HITTABHERE>
grabhelpjarruntestversion
如果你使用的是Brew或者M(jìn)acPorts安裝的SpringBootCLI,那么該命令會(huì)自動(dòng)加入到你的環(huán)境變量中(你可以直接運(yùn)行StringBootCLI的相關(guān)命令)
10.2.6 WindowsScoop安裝(WindowsScoopInstallation)
如果您在Windows上并使用Scoop竞滓,可以使用以下命令安裝SpringBootCLI:
>scoopbucketaddextras
>scoopinstallspringboot
Scoop將Spring安裝到~/scoop/apps/springboot/current/bin
目錄.
如果你使用Scoop安裝時(shí)發(fā)現(xiàn)超時(shí)情況咐吼,可以嘗試先執(zhí)行
scoopupdate
,然后在安裝
10.2.7 SpringCLI快速開(kāi)始例子(Quick-startSpringCLIExample)
您可以使用以下web應(yīng)用程序來(lái)測(cè)試您的安裝商佑。首先锯茄,創(chuàng)建一個(gè)名為app.groovy
的文件,如下所示:
@RestController
classThisWillActuallyRun{
@RequestMapping("/")
Stringhome(){
"HelloWorld!"
}
}
使用以下命令運(yùn)行:
$springrunapp.groovy
由于要下載很多依賴,應(yīng)用程序的第一次運(yùn)行很慢肌幽。后續(xù)運(yùn)行要快得多晚碾。
使用瀏覽器打開(kāi)Openlocalhost:8080
,你將看見(jiàn)如下內(nèi)容:
HelloWorld!
10.3 升級(jí)早期SpringBoot版本(UpgradingfromanEarlierVersionofSpringBoot)
如果你想從早期版本升級(jí)SpringBoot牍颈,你可以查看“migrationguide”ontheprojectwiki迄薄,這里系統(tǒng)了詳細(xì)的安裝流程,查看“releasenotes”瀏覽新特性煮岁。
當(dāng)升級(jí)到新特性版本時(shí)讥蔽,一些屬性可能已經(jīng)被重命名或刪除。SpringBoot提供了一種方法來(lái)分析應(yīng)用程序的環(huán)境画机,并在啟動(dòng)時(shí)打印診斷信息冶伞,還可以在運(yùn)行時(shí)臨時(shí)遷移屬性。要啟用該特性响禽,請(qǐng)向項(xiàng)目添加以下依賴項(xiàng):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
最新版本添加到環(huán)境中的屬性(例如
@PropertySource
)將不被考慮。
遷移完成之后荚醒,請(qǐng)確保將此模塊從項(xiàng)目的依賴項(xiàng)中刪除芋类。
如果是更新SpringCLI,可以使用包管理工具界阁,例如brewupgrade
,如果是新安裝CLI侯繁,安裝這個(gè)流程。記得最后要更新PATH環(huán)境變量去除原來(lái)舊的引用泡躯。
11. 開(kāi)發(fā)你的第一個(gè)SpringBoot應(yīng)用(DevelopingYourFirstSpringBootApplication)
本章節(jié)將介紹如何開(kāi)發(fā)一個(gè)簡(jiǎn)易的SpringBootHelloWorld
贮竟,它包含了許多SpringBoot的關(guān)鍵特性。我們將使用Maven作為構(gòu)建工具(Maven被大多數(shù)IDE支持)
spring.io給出了許多SpringBoot的“GettingStarted”指南较剃,如果你需要解決特殊的問(wèn)題咕别,請(qǐng)?jiān)L問(wèn)這里。
您可以通過(guò)點(diǎn)擊start.spring.io選擇“Web”啟動(dòng)項(xiàng)來(lái)縮短開(kāi)發(fā)步驟写穴,這樣可以生成一個(gè)新的項(xiàng)目結(jié)構(gòu)惰拱,你可以立即開(kāi)始編寫代碼。查看SpringInitializrdocumentation了解更多細(xì)節(jié)啊送。
在我們開(kāi)始之前偿短,打開(kāi)一個(gè)終端并運(yùn)行以下命令,以確保安裝了有效的Java和Maven版本:
$java-version
javaversion"1.8.0_102"
Java(TM)SERuntimeEnvironment(build1.8.0_102-b14)
JavaHotSpot(TM)64-BitServerVM(build25.102-b14,mixedmode)
$mvn-v
ApacheMaven3.5.4(1edded0938998edf8bf061f1ceb3cfdeccf443fe;2018-06-17T14:33:14-04:00)
Mavenhome:/usr/local/Cellar/maven/3.3.9/libexec
Javaversion:1.8.0_102,vendor:OracleCorporation
這個(gè)例子在一個(gè)文件目錄下創(chuàng)建删掀,我們假設(shè)你已經(jīng)創(chuàng)建了一個(gè)目錄并將它作為你的當(dāng)前目錄。
11.1 創(chuàng)建文件(Creatingthe)
我們需要?jiǎng)?chuàng)建一個(gè)Maven.xml
文件导街,該.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org//4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org//4.0.0http://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.1.RELEASE</version>
</parent>
<!--Additionallinestobeaddedhere...-->
</project>
上面的文件是可以被運(yùn)行的披泪,你可以運(yùn)行mvnpackage
進(jìn)行測(cè)試.
此時(shí),您可以將項(xiàng)目導(dǎo)入IDE(大多數(shù)現(xiàn)代JavaIDE都包含對(duì)Maven的內(nèi)置支持)搬瑰。為了簡(jiǎn)單起見(jiàn)款票,我們?cè)诒纠欣^續(xù)使用純文本編輯器控硼。
11.2 增加環(huán)境依賴(AddingClasspathDependencies)
SpringBoot提供了許多“starter”,可以將jar添加到類路徑中艾少。我們的例子使用了spring-boot-starter-parent
作為父項(xiàng)目卡乾,spring-boot-starter-parent
定義了許多Maven默認(rèn)值。它還提供了一個(gè)dependency-management
缚够,以便您可以省略版本號(hào)就能獲得“blessed”依賴幔妨。
其他一些“starter”可以在開(kāi)發(fā)特定類型的應(yīng)用程序時(shí)提供你需要的依賴項(xiàng)。因?yàn)槲覀冋陂_(kāi)發(fā)一個(gè)web應(yīng)用程序谍椅,所以我們添加了一個(gè)spring-boot-starter-web
依賴項(xiàng)误堡。在此之前,我們可以通過(guò)運(yùn)行以下命令查看當(dāng)前的情況:
$mvndependency:tree
[INFO]com.example:myproject:jar:0.0.1-SNAPSHOT
mvndependency:tree
命令用于打印出你項(xiàng)目的依賴樹(shù)雏吭,你會(huì)發(fā)現(xiàn)spring-boot-starter-parent
并沒(méi)有提供任何依賴锁施,要添加必要的依賴項(xiàng),請(qǐng)編輯.xml在在<dependencies>
內(nèi)添加spring-boot-start-web
依賴項(xiàng):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果再次運(yùn)行mvn命令dependency:tree
杖们,您會(huì)看到現(xiàn)在有許多附加的依賴項(xiàng)悉抵,包括Tomcatweb服務(wù)器和SpringBoot本身。
11.3 編寫實(shí)現(xiàn)代碼(WritingtheCode)
要完成應(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
,包含以下代碼:
importorg.springframework.boot.* ;
importorg.springframework.boot.autoconfigure.* ;
importorg.springframework.web.bind.annotation.* ;
@RestController
@EnableAutoConfiguration
publicclassExample{
@RequestMapping("/")
Stringhome(){
return"HelloWorld!";
}
publicstaticvoidmain(String[]args)throwsException{
SpringApplication.run(Example.class,args);
}
}
雖然這里沒(méi)有多少代碼荆秦,但是發(fā)生了很多事情篱竭。我們將在接下來(lái)的幾節(jié)中逐步介紹重要的部分。
11.3.1 @RestController
和@RequestMapping
注解(The@RestControllerand@RequestMappingAnnotations)
我們實(shí)例項(xiàng)目的第一個(gè)注解為@RestController
步绸,它被稱為構(gòu)造型注釋掺逼。它為閱讀代碼的人和Spring提供了提示,說(shuō)明類扮演了特定的角色瓤介。在本例中吕喘,我們的類是Web@Controller
,因此Spring在處理傳入的web請(qǐng)求時(shí)會(huì)使用它處理刑桑。
@RequestMapping
提供了路由信息氯质。它告訴Spring任何帶有/
的HTTP請(qǐng)求都應(yīng)該映射到home方法處理。@RestController
告訴Spring將結(jié)果字符串直接呈現(xiàn)回調(diào)用方祠斧。
@RequestMapping
和@RestController
都是SpringMVC的注解闻察。查看SpringMVC相關(guān)章節(jié)獲取更多細(xì)節(jié)。
11.3.2 @EnableAutoConfiguration注解(The@EnableAutoConfigurationAnnotation)
第二個(gè)類級(jí)別的注釋是@EnableAutoConfiguration。這個(gè)注釋告訴SpringBoot根據(jù)您添加的jar依賴關(guān)系“猜測(cè)”您希望如何配置Spring辕漂。由于spring-boot-starter-web
添加了Tomcat和SpringMVC呢灶,因此自動(dòng)配置假定您正在開(kāi)發(fā)web應(yīng)用程序,并設(shè)置相應(yīng)的Spring默認(rèn)值钉嘹。
Starters和自動(dòng)化配置
自動(dòng)配置被設(shè)計(jì)成可以很好地與“Starters”一起工作鸯乃,但是這兩個(gè)概念沒(méi)有直接聯(lián)系。您可以在啟動(dòng)程序之外自由選擇jar依賴項(xiàng)跋涣。SpringBoot仍然盡力自動(dòng)配置你的應(yīng)用程序缨睡。
11.3.3 main方法(The“main”Method)
應(yīng)用程序的最后一部分是main
方法。Java程序約定main
方法為應(yīng)用程序入口點(diǎn)仆潮。我們的main方法通過(guò)調(diào)用SpringApplication
類的run
執(zhí)行SpringBoot宏蛉。SpringApplication引導(dǎo)我們的應(yīng)用程序,啟動(dòng)Spring性置,然后啟動(dòng)自動(dòng)配置的Tomcatweb服務(wù)器拾并。將Example.class
作為參數(shù)傳遞給run方法,以告訴SpringApplication哪個(gè)是主Spring組件鹏浅。args
數(shù)組也被傳遞個(gè)SpringBoot嗅义,以此來(lái)傳遞啟動(dòng)參數(shù)。
11.4 運(yùn)行這個(gè)Example(RunningtheExample)
此時(shí)隐砸,您的應(yīng)用程序應(yīng)該可以工作了之碗。由于使用了spring-boot-starter-parent
,因此你有了一個(gè)run
目標(biāo)來(lái)運(yùn)行你的應(yīng)用季希。從根項(xiàng)目目錄中鍵入mvnspring-boot:run
來(lái)啟動(dòng)應(yīng)用程序褪那。您應(yīng)該會(huì)看到類似如下輸出:
$ mvnspring-boot:run
._________
/\\/___'_____(_)______\\\\
(()\___ | '_ | '_ | | '_\/_` | \\\\
\\/___) | | _) | | | | | | | (_ | | ))))
' | ____ | .__ | _ | | _ | _ | | _\__, | ////
========= | _ | ============== | ___/=/_/_/_/
::SpringBoot::(v2.1.1.RELEASE)
..........
..........(logoutputhere)
..........
........StartedExamplein2.222seconds(JVMrunningfor6.514)
如果您打開(kāi)一個(gè)web瀏覽器輸入localhost:8080
,您應(yīng)該會(huì)看到以下輸出:
HelloWorld!
如果你想終止程序運(yùn)行式塌,可以使用ctrl-c
.
11.5 創(chuàng)建一個(gè)外部運(yùn)行的Jar(CreatinganExecutableJar)
我們通過(guò)創(chuàng)建一個(gè)可以在生產(chǎn)環(huán)境中運(yùn)行的完全自包含的可執(zhí)行jar文件來(lái)完成我們的示例博敬。可執(zhí)行jar(有時(shí)稱為“胖jar”)是包含編譯類和代碼需要運(yùn)行的所有jar依賴項(xiàng)的歸檔文件峰尝。
可執(zhí)行jar和Java
Java不提供加載嵌套jar文件的標(biāo)準(zhǔn)方法偏窝。如果希望分發(fā)自包含的應(yīng)用程序,這可能會(huì)存在問(wèn)題武学。
為了解決這個(gè)問(wèn)題祭往,許多開(kāi)發(fā)者使用“uber”jar。uberjar將來(lái)自應(yīng)用程序所有依賴項(xiàng)的所有類打包到一個(gè)歸檔文件中火窒。這種方法的問(wèn)題是很難看到應(yīng)用程序中有哪些庫(kù)硼补。如果在多個(gè)jar中使用相同的文件名(但使用不同的內(nèi)容),也會(huì)有問(wèn)題熏矿。
SpringBoot采用了一種不同的方法已骇,可以直接嵌套jar缆八。
要?jiǎng)?chuàng)建可執(zhí)行jar,我們需要將spring-boot-maven-plugin
添加到我們的.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
包含綁定重新打包目標(biāo)的<executions>
配置栏妖。如果不使用父乱豆,則需要自己聲明此配置。有關(guān)詳細(xì)信息吊趾,請(qǐng)參閱插件文檔宛裕。
按如下保存你的.xml文件,并運(yùn)行mvnpackage
命令:
$mvnpackage
[INFO]Scanningforprojects...
[INFO]
[INFO]------------------------------------------------------------------------
[INFO]Buildingmyproject0.0.1-SNAPSHOT
[INFO]------------------------------------------------------------------------
[INFO]......
[INFO]---maven-jar-plugin:2.4:jar(default-jar)@myproject---
[INFO]Buildingjar:/Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO]---spring-boot-maven-plugin:2.1.1.RELEASE:repackage(default)@myproject---
[INFO]------------------------------------------------------------------------
[INFO]BUILDSUCCESS
[INFO]------------------------------------------------------------------------
你可以查看target
目錄下的myproject-0.0.1-SNAPSHOT.jar
文件论泛,大概在10MB左右揩尸,如果你想查看里面的內(nèi)容,請(qǐng)使用命令jartvf
屁奏,如下:
$jartvftarget/myproject-0.0.1-SNAPSHOT.jar
您還應(yīng)該在target
目錄中看到一個(gè)名為myproject-0.0.1-SNAPSHOT.jar.original
的小得多的文件岩榆。這是Maven在被SpringBoot重新打包之前創(chuàng)建的原始jar文件。
要運(yùn)行該應(yīng)用程序坟瓢,請(qǐng)使用java-jar
命令勇边,如下:
$java-jartarget/myproject-0.0.1-SNAPSHOT.jar
._________
/\\/___'_____(_)______\\\\
(()\___ | '_ | '_ | | '_\/_` | \\\\
\\/___) | | _) | | | | | | | (_ | | ))))
' | ____ | .__ | _ | | _ | _ | | _\__, | ////
========= | _ | ============== | ___/=/_/_/_/
::SpringBoot::(v2.1.1.RELEASE)
..........
..........(logoutputhere)
..........
........StartedExamplein2.536seconds(JVMrunningfor2.864)
通過(guò)ctrl-c
結(jié)束運(yùn)行。
12. 接下來(lái)涉及的內(nèi)容(WhattoReadNext)
希望本節(jié)提供了一些SpringBoot基礎(chǔ)知識(shí)折联,幫助您編寫自己的應(yīng)用程序粒褒。如果您是一名面向任務(wù)的開(kāi)發(fā)人員,您可能希望跳到spring.io诚镰,并查看一些解決具體問(wèn)題的入門指南奕坟,我們也提供了“How-to”的相關(guān)文檔。
SpringBootrepository還提供了一些可以運(yùn)行的示例清笨。示例獨(dú)立于代碼的其余部分
否則月杉,下一個(gè)合乎邏輯的步驟是閱讀第三部分“使用SpringBoot”。如果您實(shí)在沒(méi)有耐心函筋,您還可以跳到前面沙合,閱讀有關(guān)SpringBoot特性的文章。