讀古今文學網 > Spring Boot實戰 > 1.2 Spring Boot入門 >

1.2 Spring Boot入門

從根本上來說,Spring Boot的項目只是普通的Spring項目,只是它們正好用到了Spring Boot的起步依賴和自動配置而已。因此,那些你早已熟悉的從頭創建Spring項目的技術或工具,都能用於Spring Boot項目。然而,還是有一些簡便的途徑可以用來開啟一個新的Spring Boot項目。

最快的方法就是安裝Spring Boot CLI,安裝後就可以開始寫代碼,如代碼清單1-1,接著通過CLI來運行就好。

1.2.1 安裝Spring Boot CLI

如前文所述,Spring Boot CLI提供了一種有趣的、不同尋常的Spring應用程序開發方式。第5章裡會詳細解釋CLI提供的功能。這裡先來看看如何安裝Spring Boot CLI,這樣才能運行代碼清單1-1。

Spring Boot CLI有好幾種安裝方式。

  • 用下載的分發包進行安裝。

  • 用Groovy Environment Manager進行安裝。

  • 通過OS X Homebrew進行安裝。

  • 使用MacPorts進行安裝。

我們分別看一下這幾種方式。除此之外,還要瞭解如何安裝Spring Boot CLI的命令行補全支持,如果你在BASH或zsh shell裡使用CLI,這會非常有用(抱歉了,各位Windows用戶)。先來看看如何用分發包手工安裝Spring Boot CLI吧。

1. 手工安裝Spring Boot CLI

安裝Spring Boot CLI最直接的方法大約是下載、解壓,隨後將它的bin目錄添加到系統路徑裡。你可以從以下兩個地址下載分發包:

  • http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/spring-boot-cli-1.3.0.RELEASE-bin.zip

  • http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/spring-boot-cli-1.3.0.RELEASE-bin.tar.gz

下載完成之後,把它解壓到文件系統的任意目錄裡。在解壓後的目錄裡,你會找到一個bin目錄,其中包含了一個spring.bat腳本(用於Windows環境)和一個spring腳本(用於Unix環境)。把這個bin目錄添加到系統路徑裡,然後就能使用Spring Boot CLI了。

為Spring Boot建立符號鏈接 如果是在安裝了Unix的機器上使用Spring Boot CLI,最好建立一個指向解壓目錄的符號鏈接,然後把這個符號鏈接添加到系統路徑,而不是實際的目錄。這樣後續升級Spring Boot新版本,或是轉換版本,都會很方便,只要重建一下符號鏈接,指向新版本就好了。

你可以先淺嘗輒止,看看你所安裝的CLI版本號:

$ spring --version

  

如果一切正常,你會看到安裝好的Spring Boot CLI的版本號。

雖然這是手工安裝,但一切都很容易,而且不要求你安裝任何附加的東西。如果你是Windows用戶,也別無選擇,這是唯一的安裝方式。但如果你使用的是Unix機器,而且想要稍微自動化一點的方式,那麼可以試試Software Development Kit Manager。

2. 使用Software Development Kit Manager進行安裝

軟件開發工具管理包(Software Development Kit Manager,SDKMAN,曾用簡稱GVM)也能用來安裝和管理多版本Spring Boot CLI。使用前,你需要先從http://sdkman.io獲取並安裝SDKMAN。最簡單的安裝方式是使用命令行:

$ curl -s get.sdkman.io | bash

  

跟隨輸出的指示就能完成SDKMAN的安裝。在我的機器上,我在命令行裡執行了如下命令:

$ source "/Users/habuma/.sdkman/bin/sdkman-init.sh"

  

注意,用戶不同,這條命令也會有所不同。我的用戶目錄是/Users/habuma,因此這也是shell腳本的根路徑。你需要根據實際情況稍作調整。一旦安裝好了SDKMAN,就可以用下面的方式來安裝Spring Boot CLI了:

$ sdk install springboot
$ spring --version

  

假設一切正常,你將看到Spring Boot的當前版本號。

如果想升級新版本的Spring Boot CLI,只需安裝並使用即可。使用SDKMAN的list命令可以找到可用的版本:

$ sdk list springboot

  

list命令列出了所有可用版本,包括已經安裝的和正在使用的。從中選擇一個進行安裝,然後就可以正常使用。舉例來說,要安裝Spring Boot CLI 1.3.0.RELEASE,直接使用install命令,指定版本號:

$ sdk install springboot 1.3.0.RELEASE

  

這樣就會安裝一個新版本,隨後你會被詢問是否將其設置為默認版本。要是你不想把它作為默認版本,或者想要切換到另一個版本,可以用use命令:

$ sdk use springboot 1.3.0.RELEASE

  

如果你希望把那個版本作為所有shell的默認版本,可以使用default命令:

$ sdk default springboot 1.3.0.RELEASE

  

使用SDKMAN來管理Spring Boot CLI有一個好處,你可以便捷地在Spring Boot的不同版本之間切換。這樣你可以在正式發佈前試用快照版本(snapshot)、里程碑版本(milestone)和尚未正式發佈的候選版本(release candidate),試用後再切回穩定版本進行其他工作。

3. 使用Homebrew進行安裝

如果要在OS X的機器上進行開發,你還可以用Homebrew來安裝Spring Boot CLI。Homebrew是OS X的包管理器,用於安裝多種不同應用程序和工具。要安裝Homebrew,最簡單的方法就是運行安裝用的Ruby腳本:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  

你可以在http://brew.sh看到更多關於Homebrew的內容(還有安裝方法)。

要用Homebrew來安裝Spring Boot CLI,你需要引入Pivotal的tap2:

2tap是向Homebrew添加額外倉庫的一種途徑。Pivotal是Spring及Spring Boot背後的公司,通過它的tap可以安裝Spring Boot。

$ brew tap pivotal/tap

  

在有了Pivotal的tap後,就可以像下面這樣安裝Spring Boot CLI了:

$ brew install springboot

  

Homebrew會把Spring Boot CLI安裝到/usr/local/bin,之後可以直接使用。可以通過檢查版本號來驗證安裝是否成功:

$ spring --version

  

這條命令應該會返回剛才安裝的Spring Boot版本號。你也可以運行代碼清單1-1看看。

4. 使用MacPorts進行安裝

OS X用戶還有另一種安裝Spring Boot CLI的方法,即使用MacPorts,這是Mac OS X上另一個流行的安裝工具。要使用MacPorts來安裝Spring Boot CLI,必須先安裝MacPorts,而MacPorts還要求安裝Xcode。此外,使用不同版本的OS X時,MacPorts的安裝步驟也會有所不同。因此我建議你根據https://www.macports.org/install.php的安裝指南來安裝MacPorts。

一旦安裝好了MacPorts,就可以用以下命令來安裝Spring Boot CLI了:

$ sudo port install spring-boot-cli

  

MacPorts會把Spring Boot CLI安裝到/opt/local/share/java/spring-boot-cli,並在/opt/local/bin裡放一個指向其可執行文件的符號鏈接。在安裝MacPorts後,/opt/local/bin這個目錄應該就在系統路徑裡了。你可以檢查版本號來驗證安裝是否成功:

$ spring --version

  

這條命令應該會返回剛才安裝的Spring Boot的版本號。你也可以運行代碼清單1-1,看看效果如何。

5. 開啟命令行補全

Spring Boot CLI為基於CLI的應用程序的運行、打包和測試提供了一套好用的命令。而且,每個命令都有好多選項。要記住這些東西實屬不易,命令行補全能幫助記憶怎麼使用Spring Boot CLI。

如果用Homebrew安裝Spring Boot CLI,那麼命令行補全已經安裝完畢。但如果是手工安裝或者用SDKMAN安裝的,那就需要執行腳本或者手工安裝。(如果是通過MacPorts安裝的Spring Boot CLI,那麼你不必考慮命令行補全。)

你可以在Spring Boot CLI安裝目錄的shell-completion子目錄裡找到補全腳本。有兩個不同的腳本,一個是針對BASH的,另一個是針對zsh的。要使用BASH的補全腳本,可以在命令行裡鍵入以下命令(假設安裝時用的是SDKMAN):

$ . ~/.sdkman/springboot/current/shell-completion/bash/spring

  

這樣,在當前的shell裡就可以使用Spring Boot CLI的補全功能了,但每次開啟一個新的shell都要重新執行一次上面的命令才行。你也可以把這個腳本複製到你的個人或系統腳本目錄裡,這個目錄的位置在不同的Unix裡也會有所不同,可以參考系統文檔(或Google)瞭解細節。

開啟了命令行補全之後,在命令行裡鍵入spring命令,然後按Tab鍵就能看到下一步該輸什麼的提示。選中一個命令後,鍵入--(兩個連字符)後再按Tab,就會顯示出該命令的選項列表。

如果你在Windows上進行開發,或者沒有用BASH或zsh,那就無緣使用這些命令行補全腳本了。儘管如此,如果你用的是Spring Boot CLI的shell,那一樣也有命令補全:

$ spring shell

  

和BASH、zsh的命令補全腳本(在BASH/zsh shell裡執行的)不同,Spring Boot CLI shell會新開一個特別針對Spring Boot的shell,在裡面可以執行各種CLI命令,Tab鍵也能有命令補全。

Spring Boot CLI為Spring Boot提供了快速上手和構建簡單原型應用程序的途徑。稍後將在第8章中講到,在正確的生產運行時環境下,它也能用於開發生產應用程序。

儘管如此,與大部分Java項目的開發相比,Spring Boot CLI的流程還是不太符合常規。通常情況下,Java項目用Gradle或Maven這樣的工具構建出WAR文件,再把這些文件部署到應用服務器裡。即便CLI模型讓你感到不太舒服,你仍然可以在傳統方式下充分利用大部分Spring Boot特性。3Spring Initializr可以成為你萬里長征的第一步。

3只是要放棄那些用到Groovy語言靈活性的特性,比如自動依賴和import解析。

1.2.2 使用Spring Initializr初始化Spring Boot項目

萬事開頭難,你需要設置一個目錄結構存放各種項目內容,創建構建文件,並在其中加入各種依賴。Spring Boot CLI消除了不少設置工作,但如果你更傾向於傳統Java項目結構,那你應該看看Spring Initializr。

Spring Initializr從本質上來說就是一個Web應用程序,它能為你生成Spring Boot項目結構。雖然不能生成應用程序代碼,但它能為你提供一個基本的項目結構,以及一個用於構建代碼的Maven或Gradle構建說明文件。你只需要寫應用程序的代碼就好了。

Spring Initializr有幾種用法。

  • 通過Web界面使用。

  • 通過Spring Tool Suite使用。

  • 通過IntelliJ IDEA使用。

  • 使用Spring Boot CLI使用。

下面分別看看這幾種用法,先從Web界面開始。

1. 使用Spring Initializr的Web界面

要使用Spring Initializr,最直接的辦法就是用瀏覽器打開http://start.spring.io,你應該能看到類似圖1-1的一個表單。

表單的頭兩個問題是,你想用Maven還是Gradle來構建項目,以及使用Spring Boot的哪個版本。程序默認生成Maven項目,並使用Spring Boot的最新版本(非里程碑和快照版本),但你也可以自由選擇其他選項。

表單左側要你指定項目的一些基本信息。最起碼你要提供項目的Group和Artifact,但如果你點擊了「Switch to the full version」鏈接,還可以指定額外的信息,比如版本號和基礎包名。這些信息是用來生成Maven的pom.xml文件(或者Gradle的build.gradle文件)的。

圖 1-1 Spring Initializr是生成空Spring項目的Web應用程序,可以視為開發過程的第一步

表單右側要你指定項目依賴,最簡單的方法就是在文本框裡鍵入依賴的名稱。隨著你的輸入會出現匹配依賴的列表,選中一個(或多個)依賴,選中的依賴就會加入項目。如果找不到你要的依賴,點擊「Switch to the full version」就能看到可用依賴的完整列表。

要是你瞄過一眼附錄B,就會發現這裡的依賴和Spring Boot起步依賴是對應的。實際上,在這裡選中依賴,就相當於告訴Initializr把對應的起步依賴加到項目的構建文件裡。(第2章會進一步討論Spring Boot起步依賴。)

填完表單,選好依賴,點擊「Generate Project」按鈕,Spring Initializr就會為你生成一個項目。瀏覽器將會以ZIP文件的形式(文件名取決於Artifact字段的內容)把這個項目下載下來。根據你的選擇,ZIP文件的內容也會略有不同。不管怎樣,ZIP文件都會包含一個極其基礎的項目,讓你能著手使用Spring Boot開發應用程序。

舉例來說,假設你在Spring Initializr裡指定了如下信息。

  • Artifact:myapp

  • 包名:myapp

  • 類型:Gradle項目

  • 依賴:Web和JPA

點擊「Generate Project」,就能獲得一個名為myapp.zip的ZIP文件。解壓後的項目結構同圖1-2類似。

圖 1-2 Initializr創建的項目,提供了構建Spring Boot應用程序所需的基本內容

如你所見,項目裡基本沒有代碼,除了幾個空目錄外,還包含了如下幾樣東西。

  • build.gradle:Gradle構建說明文件。如果選擇Maven項目,這就會換成pom.xml。

  • Application.java:一個帶有main方法的類,用於引導啟動應用程序。

  • ApplicationTests.java:一個空的JUnit測試類,它加載了一個使用Spring Boot自動配置功能的Spring應用程序上下文。

  • application.properties:一個空的properties文件,你可以根據需要添加配置屬性。

在Spring Boot應用程序中,就連空目錄都有自己的意義。static目錄放置的是Web應用程序的靜態內容(JavaScript、樣式表、圖片,等等)。還有,稍後你將看到,用於呈現模型數據的模板會放在templates目錄裡。

你很可能會把Initializr生成的項目導入IDE。如果你用的IDE是Spring Tool Suite,則可以直接在IDE裡創建項目。下面來看看Spring Tool Suite是怎麼創建Spring Boot項目的。

2. 在Spring Tool Suite裡創建Spring Boot項目

長久以來,Spring Tool Suite4一直都是開發Spring應用程序的不二之選。從3.4.0版本開始,它就集成了Spring Initializr,這讓它成為開始上手Spring Boot的好方法。

4Spring Tool Suite是Eclipse IDE的一個發行版,增加了諸多能輔助Spring開發的特性。你可以從http://spring.io/tools/sts下載Spring Tool Suite。

要在Spring Tool Suite裡創建新的Spring Boot應用程序,在File菜單裡選中New > Spring Starter Project菜單項,隨後Spring Tool Suite會顯示一個與圖1-3相仿的對話框。

圖 1-3 Spring Tool Suite集成了Spring Initializr,可以在IDE裡創建並直接導入Spring Boot項目

如你所見,這個對話框要求填寫的信息和Spring Initializr的Web界面裡是一樣的。事實上,你在這裡提供的數據會被發送給Spring Initializr,用於創建項目ZIP文件,這和使用Web表單是一樣的。

如果你想在文件系統上指定項目創建的位置,或者把它加入IDE裡的特定工作集,就點擊Next按鈕。你會看到第二個對話框,如圖1-4所示。

圖 1-4 Spring Starter Project對話框的第2頁可以讓你指定在哪裡創建項目

Location指定了文件系統上項目的存放位置。如果你使用Eclipse的工作集來組織項目,那麼也可以勾上Add Project to Working Sets這個復選框,選擇一個工作集,這樣就能把項目加入指定的工作集了。

Site Info部分簡單描述了將要用來訪問Initializr的URL,大多數情況下你都可以忽略這部分內容。然而,如果要部署自己的Initializr服務器(從https://github.com/spring-io/initializr複製代碼即可),你可以在這裡設置Initializr基礎URL。

點擊Finish按鈕後,項目的生成和導入過程就開始了。你必須認識到一點,Spring Tool Suite的Spring Starter Project對話框,其實是把項目生成的工作委託給http://start.spring.io上的Spring Initializr來做的,因此必須聯網才能使用這一功能。

一旦把項目導入工作空間,應用程序就可以開發了。在開發的過程中,你會發現Spring Tool Suite針對Spring Boot還有一些錦上添花的功能。比如,可以在Run菜單裡選中Run As > Spring Boot Application,在嵌入式服務器裡運行你的應用程序。

注意,Spring Tool Suite是通過REST API與Initializr交互的,因此只有連上Initializr它才能正常工作。如果你的開發機離線,或者Initializr被防火牆阻斷了,那麼Spring Tool Suite的Spring Starter Project嚮導是無法使用的。

3. 在IntelliJ IDEA裡創建Spring Boot項目

IntelliJ IDEA是非常流行的IDE,IntelliJ IDEA 14.1已經支持Spring Boot了!5

5你可以從https://www.jetbrains.com/idea/獲取IntelliJ IDEA。它是一款商業IDE,這意味著你需要付費使用。但是你可以下載試用版,它對開源項目免費。

要在IntelliJ IDEA裡創建新的Spring Boot應用程序,在File菜單裡選擇New > Project。你會看到幾屏內容(圖1-5是第一屏),問的問題和Initializr的Web應用程序以及Spring Tool Suite類似。

圖 1-5 IntelliJ IDEA裡Spring Boot初始化嚮導的第一屏

在首先顯示的這一屏中,在左側項目選擇裡選中Spring Initializr,隨後會提示你選擇一個Project SDK(基本上就是這個項目要用的Java SDK),同時選擇Initializr Web服務的位置。除非你在使用自己的Initializr,否則應該不做任何修改直接點Next按鈕,之後就到了圖1-6。

圖 1-6 在IntelliJ IDEA的Spring Boot初始化嚮導裡指定項目信息

Spring Boot初始化嚮導的第二屏要求你提供項目的一些基本信息,比如項目名稱、Maven Group和Artifact、Java版本,以及你是想用Maven還是Gradle來構建項目。描述好項目信息之後,點擊Next按鈕就能看到第三屏了,如圖1-7所示。

圖 1-7 在IntelliJ IDEA的Spring Boot初始化嚮導裡選擇項目依賴

第二屏向你詢問項目的基本信息,第三屏就開始問你要往項目裡添加什麼依賴了。和之前一樣,屏幕裡的復選框和Spring Boot起步依賴是對應的。選完之後點擊Next就到了嚮導的最後一屏,如圖1-8所示。

圖 1-8 IntelliJ IDEA的Spring Boot初始化嚮導的最後一屏

最後一屏問你項目叫什麼名字,還有要在哪裡創建項目。一切準備就緒之後,點擊Finish按鈕,就能在IDE裡得到一個空的Spring Boot項目了。

4. 在Spring Boot CLI裡使用Initializr

如前文所述,如果你想僅僅寫代碼就完成Spring應用程序的開發,那麼Spring Boot CLI是個不錯的選擇。然而,Spring Boot CLI的功能還不限於此,它有一些命令可以幫你使用Initializr,通過它上手開發更傳統的Java項目。

Spring Boot CLI包含了一個init命令,可以作為Initializr的客戶端界面。init命令最簡單的用法就是創建Spring Boot項目的基線:

$ spring init

  

在和Initializr的Web應用程序通信後,init命令會下載一個demo.zip文件。解壓後你會看到一個典型的項目結構,包含一個Maven的pom.xml構建描述文件。Maven的構建說明只包含最基本的內容,即只有Spring Boot基線和測試起步依賴。你可能會想要更多的東西。

假設你想要構建一個Web應用程序,其中使用JPA實現數據持久化,使用Spring Security進行安全加固,可以用--dependencies-d來指定那些初始依賴:

$ spring init -dweb,jpa,security

  

這條命令會下載一個demo.zip文件,包含與之前一樣的項目結構,但在pom.xml裡增加了Spring Boot的Web、jpa和security起步依賴。請注意,在-d和依賴之間不能加空格,否則就變成了下載一個ZIP文件,文件名是web,jpa,security。

現在,假設你想用Gradle來構建項目。沒問題,用--build參數將Gradle指定為構建類型:

$ spring init -dweb,jpa,security --build gradle

  

默認情況下,無論是Maven還是Gradle的構建說明都會產生一個可執行JAR文件。但如果你想要一個WAR文件,那麼可以通過--packaging或者-p參數進行說明:

$ spring init -dweb,jpa,security --build gradle -p war

  

到目前為止,init命令只用來下載ZIP文件。如果你想讓CLI幫你解壓那個ZIP文件,可以指定一個用於解壓的目錄:

$ spring init -dweb,jpa,security --build gradle -p war myapp

  

此處的最後一個參數說明你希望把項目解壓到myapp目錄裡去。

此外,如果你希望CLI把生成的項目解壓到當前目錄,可以使用--extract或者-x參數:

$ spring init -dweb,jpa,security --build gradle -p jar -x

  

init命令還有不少其他參數,包括基於Groovy構建項目的參數、指定用Java版本編譯的參數,還有選擇構建依賴的Spring Boot版本的參數。可以通過help命令瞭解所有參數的情況:

$ spring help init

  

你也可以查看那些參數都有哪些可選項,為init命令帶上--list-l參數就可以了:

$ spring init -l

  

你一定注意到了,儘管spring init -l列出了一些Initializr支持的參數,但並非所有參數都能直接為Spring Boot CLI的init命令所支持。舉例來說,用CLI初始化項目時,你不能指定根包的名字,它默認為demo。spring help init會告訴你CLI的init命令都支持哪些參數。

無論你是用Initializr的Web界面,在Spring Tool Suite裡創建項目,還是用Spring Boot CLI來初始化項目,Spring Boot Initializr創建出來的項目都有相似的項目佈局,和你之前開發過的Java項目沒什麼不同。