本章內容
Spring Boot簡化Spring應用程序開發
Spring Boot的基本特性
Spring Boot工作區的設置
以下知識點解析來自於《SpringBoot實戰》文檔其中的一部分!由於不影響觀看,只選取了其中的一部分來展示。 需要完整版的點擊這里!!暗號博客園,獲取!
前言
Spring Framework已有十余年的歷史了,已成為Java應用程序開發框架的事實標准。在如此
悠久的歷史背景下,有人可能會認為Spring放慢了腳步,躺在了自己的榮譽簿上,再也做不出什
么新鮮的東西,或者是讓人激動的東西。甚至有人說,Spring是遺留項目,是時候去看看其他創
新的東西了。
1.1 Spring 風雲再起
Spring誕生時是Java企業版(Java Enterprise Edition,JEE,也稱J2EE)的輕量級代替品。無需開發重量級的Enterprise JavaBean(EJB),Spring為企業級Java開發提供了一種相對簡單的方法,通過依賴注入和面向切面編程,用簡單的Java對象(Plain Old Java Object,POJO)實現了EJB的功能。
雖然Spring的組件代碼是輕量級的,但它的配置卻是重量級的。一開始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基於注解的組件掃描,這消除了大量針對應用程序自身
組件的顯式XML配置。Spring 3.0引入了基於Java的配置,這是一種類型安全的可重構配置方式,
可以代替XML。
盡管如此,我們依舊沒能逃脫配置的魔爪。開啟某些Spring特性時,比如事務管理和Spring
MVC,還是需要用XML或Java進行顯式配置。啟用第三方庫時也需要顯式配置,比如基於
Thymeleaf的Web視圖。配置Servlet和過濾器(比如Spring的DispatcherServlet)同樣需要在
web.xml或Servlet初始化代碼里進行顯式配置。組件掃描減少了配置量,Java配置讓它看上去簡潔
不少,但Spring還是需要不少配置。
所有這些配置都代表了開發時的損耗。因為在思考Spring特性配置和解決業務問題之間需要
進行思維切換,所以寫配置擠占了寫應用程序邏輯的時間。和所有框架一樣,Spring實用,但與
此同時它要求的回報也不少。
除此之外,項目的依賴管理也是件吃力不討好的事情。決定項目里要用哪些庫就已經夠讓人
頭痛的了,你還要知道這些庫的哪個版本和其他庫不會有沖突,這難題實在太棘手。
並且,依賴管理也是一種損耗,添加依賴不是寫應用程序代碼。一旦選錯了依賴的版本,隨
之而來的不兼容問題毫無疑問會是生產力殺手。
Spring Boot讓這一切成為了過去。
1.1.1 重新認識 Spring
假設你受命用Spring開發一個簡單的Hello World Web應用程序。你該做什么?我能想到一些
基本的需要。
1、一個項目結構,其中有一個包含必要依賴的Maven或者Gradle構建文件,最起碼要有Spring
MVC和Servlet API這些依賴。
2、一個web.xml文件(或者一個WebApplicationInitializer實現),其中聲明了Spring
的DispatcherServlet。 一個啟用了Spring MVC的Spring配置。
3、一個控制器類,以“Hello World”響應HTTP請求。
4、 一個用於部署應用程序的Web應用服務器,比如Tomcat。
最讓人難以接受的是,這份清單里只有一個東西是和Hello World功能相關的,即控制器,剩
下的都是Spring開發的Web應用程序必需的通用樣板。既然所有Spring Web應用程序都要用到它
們,那為什么還要你來提供這些東西呢?
假設這里只需要控制器。代碼清單1-1所示基於Groovy的控制器類就是一個簡單而完整的 Spring應用程序。
@RestController class HelloController { @RequestMapping("/") def hello() { return "Hello World" } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
這里沒有配置,沒有web.xml,沒有構建說明,甚至沒有應用服務器,但這就是整個應用程
序了。Spring Boot會搞定執行應用程序所需的各種后勤工作,你只要搞定應用程序的代碼就好。
假設你已經裝好了Spring Boot的命令行界面(Command Line Interface,CLI),可以像下面這
樣在命令行里運行HelloController:
$ spring run HelloController.groovy
- 1
想必你已經注意到了,這里甚至沒有編譯代碼,Spring Boot CLI可以運行未經編譯的代碼。
之所以選擇用Groovy來寫這個控制器示例,是因為Groovy語言的簡潔與Spring Boot的簡潔有
異曲同工之妙。但Spring Boot並不強制要求使用Groovy。實際上,本書中的很多代碼都是用Java
寫的,但在恰當的時候,偶爾也會出現一些Groovy代碼。
不要客氣,直接跳到1.2.1節吧,看看如何安裝Spring Boot CLI,這樣你就能試着編寫這個小
小的Web應用程序了。現在,你將看到Spring Boot的關鍵部分,看到它是如何改變Spring應用程
序的開發方式的。
1.1.2 Spring Boot 精要
Spring Boot將很多魔法帶入了Spring應用程序的開發之中,其中最重要的是以下四個核心。
1、自動配置:針對很多Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置。
2、起步依賴:告訴Spring Boot需要什么功能,它就能引入需要的庫。
3、命令行界面:這是Spring Boot的可選特性,借此你只需寫代碼就能完成完整的應用程序,
無需傳統項目構建。
4、Actuator:讓你能夠深入運行中的Spring Boot應用程序,一探究竟。
每一個特性都在通過自己的方式簡化Spring應用程序的開發。本書會探尋如何將它們發揮到
極致,但就目前而言,先簡單看看它們都提供了哪些功能吧。
- 自動配置
在任何Spring應用程序的源代碼里,你都會找到Java配置或XML配置(抑或兩者皆有),它們
為應用程序開啟了特定的特性和功能。舉個例子,如果你寫過用JDBC訪問關系型數據庫的應用
程序,那你一定在Spring應用程序上下文里配置過JdbcTemplate這個Bean。我打賭那段配置看
起來是這樣的:
@Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); }
- 1
- 2
- 3
- 4
這段非常簡單的Bean聲明創建了一個JdbcTemplate的實例,注入了一個DataSource依賴。當
然,這意味着你還需要配置一個DataSource的Bean,這樣才能滿足依賴。假設你將配置一個嵌
入式H2數據庫作為DataSource Bean,完成這個配置場景的代碼大概是這樣的:
@Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScripts('schema.sql', 'data.sql') .build(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
這個Bean配置方法創建了一個嵌入式數據庫,並指定在該數據庫上執行兩段SQL腳本。build()
方法返回了一個指向該數據庫的引用。
這兩個Bean配置方法都不復雜,也不是很長,但它們只是典型Spring應用程序配置的一小部
分。除此之外,還有無數Spring應用程序有着完全相同的方法。所有需要用到嵌入式數據庫和
JdbcTemplate的應用程序都會用到那些方法。簡而言之,這就是一個樣板配置。
既然它如此常見,那為什么還要你去寫呢?
Spring Boot會為這些常見配置場景進行自動配置。如果Spring Boot在應用程序的Classpath里
發 現H2數據庫的庫,那么它就自動配置一個嵌入式H2數據庫。如果在Classpath里發現
JdbcTemplate,那么它還會為你配置一個JdbcTemplate的Bean。你無需操心那些Bean的配置,
Spring Boot會做好准備,隨時都能將其注入到你的Bean里
。
Spring Boot的自動配置遠不止嵌入式數據庫和JdbcTemplate,它有大把的辦法幫你減輕配
置負擔,這些自動配置涉及Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和Spring MVC。第2章會深入討論自動配置這個話題。
- 起步依賴
向項目中添加依賴是件富有挑戰的事。你需要什么庫?它的Group和Artifact是什么?你需要
哪個版本?哪個版本不會和項目中的其他依賴發生沖突?
Spring Boot通過起步依賴為項目的依賴管理提供幫助。起步依賴其實就是特殊的Maven依
賴和Gradle依賴,利用了傳遞依賴解析,把常用庫聚合在一起,組成了幾個為特定功能而定制
的依賴。
舉個例子,假設你正在用Spring MVC構造一個REST API,並將JSON(JavaScript Object
Notation)作為資源表述。此外,你還想運用遵循JSR-303規范的聲明式校驗,並使用嵌入式的
Tomcat服務器來提供服務。要實現以上目標,你在Maven或Gradle里至少需要以下8個依賴:
org.springframework:spring-core
org.springframework:spring-web
org.springframework:spring-webmvc
com.fasterxml.jackson.core:jackson-databind
org.hibernate:hibernate-validator
org.apache.tomcat.embed:tomcat-embed-core
org.apache.tomcat.embed:tomcat-embed-el
org.apache.tomcat.embed:tomcat-embed-logging-juli
不過,如果打算利用Spring Boot的起步依賴,你只需添加Spring Boot的Web起步依賴(org.springframework.boot:spring-boot-starter-web)①,僅此一個。它會根據依賴傳遞把其他所需依賴引入項目里,你都不用考慮它們。比起減少依賴數量,起步依賴還引入了一些微妙的變化。向項目中添加了Web起步依賴,實際上指定了應用程序所需的一類功能。因為應用是個Web應用程序,所以加入了Web起步依賴。
與之類似,如果應用程序要用到JPA持久化,那么就可以加入jpa起步依賴。如果需要安全功能,那就加入security起步依賴。簡而言之,你不再需要考慮支持某種功能要用什么庫了,引入相關起步依賴就行。
此外,Spring Boot的起步依賴還把你從“需要這些庫的哪些版本”這個問題里解放了出來。
起步依賴引入的庫的版本都是經過測試的,因此你可以完全放心,它們之間不會出現不兼容的
情況。
和自動配置一樣,第2章就會深入討論起步依賴。
3.命令行界面
除了自動配置和起步依賴,Spring Boot還提供了一種很有意思的新方法,可以快速開發Spring
應用程序。正如之前在1.1節里看到的那樣,Spring Boot CLI讓只寫代碼即可實現應用程序成為可能。
Spring Boot CLI利用了起步依賴和自動配置,讓你專注於代碼本身。不僅如此,你是否注意
到代碼清單1-1里沒有import?CLI如何知道RequestMapping和RestController來自哪個包呢?說到這個問題,那些類最終又是怎么跑到Classpath里的呢?
說得簡單一點,CLI能檢測到你使用了哪些類,它知道要向Classpath中添加哪些起步依賴才
能讓它運轉起來。一旦那些依賴出現在Classpath中,一系列自動配置就會接踵而來,確保啟用
DispatcherServlet和Spring MVC,這樣控制器就能響應HTTP請求了。
Spring Boot CLI是Spring Boot的非必要組成部分。雖然它為Spring帶來了驚人的力量,大大
簡化了開發,但也引入了一套不太常規的開發模型。要是這種開發模型與你的口味相去甚遠,那
也沒關系,拋開CLI,你還是可以利用Spring Boot提供的其他東西。不過如果喜歡CLI,你一定想
看看第5章,其中深入探討了Spring Boot CLI。
4 Actuator
Spring Boot的最后一塊“拼圖”是Actuator,其他幾個部分旨在簡化Spring開發,而Actuator
則要提供在運行時檢視應用程序內部情況的能力。安裝了Actuator就能窺探應用程序的內部情況
了,包括如下細節:
Spring應用程序上下文里配置的Bean
Spring Boot的自動配置做的決策
應用程序取到的環境變量、系統屬性、配置屬性和命令行參數
應用程序里線程的當前狀態
應用程序最近處理過的HTTP請求的追蹤情況
各種和內存用量、垃圾回收、Web請求以及數據源用量相關的指標
Actuator通過Web端點和shell界面向外界提供信息。如果要借助shell界面,你可以打開SSH
(Secure Shell),登入運行中的應用程序,發送指令查看它的情況。
第7章會詳細探索Actuator的功能。
1.1.3 Spring Boot 不是什么
因為Spring Boot實在是太驚艷了,所以過去一年多的時間里有不少和它相關的言論。原先聽
到或看到的東西可能給你造成了一些誤解,繼續學習本書前應該先澄清這些誤會。
首先,Spring Boot不是應用服務器。這個誤解是這樣產生的:Spring Boot可以把Web應用程
序變為可自執行的JAR文件,不用部署到傳統Java應用服務器里就能在命令行里運行。Spring Boot
在應用程序里嵌入了一個Servlet容器(Tomcat、Jetty或Undertow),以此實現這一功能。但這是
內嵌的Servlet容器提供的功能,不是Spring Boot實現的。
與之類似,Spring Boot也沒有實現諸如JPA或JMS(Java Message Service,Java消息服務)之
類的企業級Java規范。它的確支持不少企業級Java規范,但是要在Spring里自動配置支持那些特
性的Bean。例如,Spring Boot沒有實現JPA,不過它自動配置了某個JPA實現(比如Hibernate)的
Bean,以此支持JPA。
最后,Spring Boot沒有引入任何形式的代碼生成,而是利用了Spring 4的條件化配置特性,
以及Maven和Gradle提供的傳遞依賴解析,以此實現Spring應用程序上下文里的自動配置。
簡而言之,從本質上來說,Spring Boot就是Spring,它做了那些沒有它你自己也會去做的Spring
Bean配置。謝天謝地,幸好有Spring,你不用再寫這些樣板配置了,可以專注於應用程序的邏輯,
這些才是應用程序獨一無二的東西。
現在,你應該對Spring Boot有了大概的認識,是時候構建你的第一個Spring Boot應用程序了。
先從重要的事情開始,該怎么入手呢?
1.1.3 Spring Boot 不是什么
因為Spring Boot實在是太驚艷了,所以過去一年多的時間里有不少和它相關的言論。原先聽
到或看到的東西可能給你造成了一些誤解,繼續學習本書前應該先澄清這些誤會。
首先,Spring Boot不是應用服務器。這個誤解是這樣產生的:Spring Boot可以把Web應用程序變為可自執行的JAR文件,不用部署到傳統Java應用服務器里就能在命令行里運行。Spring Boot在應用程序里嵌入了一個Servlet容器(Tomcat、Jetty或Undertow),以此實現這一功能。但這是內嵌的Servlet容器提供的功能,不是Spring Boot實現的。
與之類似,Spring Boot也沒有實現諸如JPA或JMS(Java Message Service,Java消息服務)之
類的企業級Java規范。它的確支持不少企業級Java規范,但是要在Spring里自動配置支持那些特
性的Bean。例如,Spring Boot沒有實現JPA,不過它自動配置了某個JPA實現(比如Hibernate)的
Bean,以此支持JPA。
最后,Spring Boot沒有引入任何形式的代碼生成,而是利用了Spring 4的條件化配置特性,
以及Maven和Gradle提供的傳遞依賴解析,以此實現Spring應用程序上下文里的自動配置。
簡而言之,從本質上來說,Spring Boot就是Spring,它做了那些沒有它你自己也會去做的Spring
Bean配置。謝天謝地,幸好有Spring,你不用再寫這些樣板配置了,可以專注於應用程序的邏輯,
這些才是應用程序獨一無二的東西。
現在,你應該對Spring Boot有了大概的認識,是時候構建你的第一個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吧。
- 手工安裝Spring Boot CLI
安裝Spring Boot CLI最直接的方法大約是下載、解壓,隨后將它的bin目錄添加到系統路徑里。
你可以從以下兩個地址下載分發包:
http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/springboot-cli-1.3.0.RELEASE-bin.zip
http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/springboot-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。
- 使用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),試用后再切回穩定版本進行其他工作。
- 使用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的tap①:
$ 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看看。
- 使用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特性。①Spring Initializr可以成為你萬里長征的第一步。
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界面開始。
- 使用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文件)的。
表單右側要你指定項目依賴,最簡單的方法就是在文本框里鍵入依賴的名稱。隨着你的輸入會出現匹配依賴的列表,選中一個(或多個)依賴,選中的依賴就會加入項目。如果找不到你要的依賴,點擊“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
類似。
如你所見,項目里基本沒有代碼,除了幾個空目錄外,還包含了如下幾樣東西。
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項目的。
**
以下知識點解析來自於《SpringBoot實戰》文檔其中的一部分!由於不影響觀看,只選取了其中的一部分來展示。
需要完整版的可以點擊這里!!暗號博客園,獲取!
**