本節描述如何開發一個簡單的「Hello World!」 web應用程序來突出了Spring Boot的一些關鍵特性,咱們使用Maven來構建這個項目,由於大多數IDE都支持它。html
spring.io網站包含許多使用Spring Boot的「 入門」指南,若是你須要解決一個具體的問題,先檢查一下。
你能夠經過使用 start.spring.io和從依賴關係搜索器中選擇「Web」啓動器來快捷地完成如下步驟,這樣作會生成一個新的項目結構,這樣你就能夠 當即開始編寫代碼,查看 Spring Initializr文檔瞭解更多細節。
在開始以前,打開一個終端並運行如下命令,以確保安裝了有效的Java和Maven版本:java
$ 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.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_102, vendor: Oracle Corporation
此示例須要在其本身的文件夾中建立,隨後的指令假設你已經建立了一個合適的文件夾,而且它是你當前的目錄。
咱們須要先建立一個Maven pom.xml
文件,pom.xml
是用於構建項目的,打開你最喜歡的文本編輯器並添加如下內容:git
<?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 http://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.0.5.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
前面的清單應該給你一個工做構建,你能夠經過運行mvn package
來測試它(如今,你能夠忽略「jar will be empty - no content was marked for inclusion!
」的警告)。github
此時,你能夠將項目導入到IDE中(大多數現代Java IDE都包含對Maven的內置支持),爲了簡單起見,咱們繼續使用這個示例的純文本編輯器。
Spring Boot提供了一些「Starters」,可讓你將jar添加到類路徑中,咱們的示例應用程序已經在POM的父部分使用了spring-boot-starter-parent
,spring-boot-starter-parent
是一個特殊的starter,它提供有用的Maven默認值,它還提供了一個dependency-management部分,以便你能夠「幸福」的省略依賴項的version
標記。web
其餘「Starters」提供了在開發特定類型的應用程序時可能須要的依賴項,因爲咱們正在開發一個web應用程序,因此咱們添加了一個spring-boot-starter-web
依賴項。在此以前,咱們能夠經過運行如下命令查看當前所擁有的內容:spring
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree
命令以樹的形式打印項目依賴項,你能夠看到spring-boot-starter-parent
自己不提供依賴性,要添加必要的依賴項,請編輯pom.xml
並將spring-boot-starter-web
依賴項當即添加到parent
部分下面:apache
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
若是你再次運行mvn dependency:tree
,你會看到如今有許多額外的依賴項,包括Tomcat web服務器和Spring Boot自己。segmentfault
要完成咱們的應用程序,咱們須要建立一個Java文件,默認狀況下,Maven從src/main/java
編譯源代碼,所以你須要建立該文件夾結構,而後添加一個名爲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) throws Exception { SpringApplication.run(Example.class, args); } }
雖然這裏沒有多少代碼,但仍有不少工做要作,咱們將在接下來的幾節中討論重要的部分。瀏覽器
在咱們的Example
類上的第一個註解是@RestController
,這被稱爲構造型註解,它爲閱讀代碼的人們提供了一些提示,而且爲Spring提供了一個特定的角色。在本例中,咱們的類是一個web @Controller
,因此Spring在處理傳入web請求時考慮它。
@RequestMapping
註解提供了「路由」信息,它告訴Spring,任何帶有/
路徑的HTTP請求都應該映射到home
方法,@RestController
註解告訴Spring將生成的字符串直接呈現給調用者。
@RestController
和@RequestMapping
註解是Spring MVC註解,(它們不是特定於Spring Boot的)有關更多詳細信息,請參見Spring參考文檔中的 MVC部分。
第二個類級別註解是@EnableAutoConfiguration
,這個註解告訴Spring Boot基於你添加的jar依賴項「猜想」你想如何配置Spring,由於Spring-boot-starter-web
添加了Tomcat和Spring MVC,因此自動配置假設你正在開發一個web應用程序,並相應地設置Spring。
Starters和自動配置
自動配置被設計成與「Starters」很好地工做,可是這兩個概念並無直接關聯。你能夠自由地挑選和選擇除starters以外的jar依賴項,Spring Boot仍然盡力自動配置你的應用程序。
咱們的應用程序的最後一部分是main
方法,這只是遵循應用程序入口點的Java約定的標準方法。咱們的main方法經過調用run
委託給Spring Boot的SpringApplication
類,SpringApplication
引導咱們的應用程序啓動Spring,而Spring又啓動了自動配置的Tomcat web服務器。咱們須要經過Example.class
做爲run
方法的參數,以告訴SpringApplication
它是主Spring組件,args
數組也被傳遞,以公開任何命令行參數。
此時,你的應用程序應該能夠工做了,由於你使用了spring-boot-starter-parent
POM,因此你有一個有用的run
目標,你可使用它來啓動應用程序。類型mvn spring-boot:run
從根項目目錄運行,以啓動應用程序,你應該會看到相似以下的輸出:
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
若是你打開一個web瀏覽器到localhost:8080,你應該會看到如下輸出:
Hello World!
要優雅地退出應用程序,按ctrl-c
。
咱們經過建立一個能夠在生產中運行的徹底自包含的可執行jar文件來完成咱們的示例,可執行jar(有時稱爲「fat jars」)是包含你的編譯類的存檔文件,以及你的代碼須要運行的全部jar依賴項。
可執行jar和Java
Java沒有提供加載嵌套jar文件的標準方法(jar文件自己包含在一個jar中)。
若是你但願分發一個自包含的應用程序,這可能會有問題。爲了解決這個問題,許多開發人員使用「uber」jar,一個uber jar將全部應用程序依賴項的全部類打包成一個歸檔文件,這種方法的問題在於,很難看到應用程序中有哪些庫,若是在多個jar中使用相同的文件名(但使用不一樣的內容),也會有問題。
Spring Boot採用了一種不一樣的方法,讓你能夠直接嵌套jar。
要建立一個可執行jar,咱們須要將spring-boot-maven-plugin
添加到咱們的pom.xml
中,要作到這一點,請在dependencies
部分下面插入如下幾行:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
spring-boot-starter-parent
POM包括<executions>
配置以綁定repackage
目標,若是你不使用父POM,你須要本身聲明這個配置,有關詳細信息,請參見 插件文檔。
保存你的pom.xml
並從命令行運行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.0.5.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
若是查看target
目錄,應該會看到myproject-0.0.1-snapshot.jar
,文件的大小應該在10MB左右,若是你想查看內部,可使用jar tvf
,以下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
你還應該看到一個更小的文件,名爲myproject-0.0.1-snapshot.jar.original
在target
目錄中,這是Maven在Spring Boot從新打包以前建立的原始jar文件。
要運行該應用程序,請使用java -jar
命令,以下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)
如前所述,退出應用程序,按ctrl-c
。
但願這一節提供了一些Spring Boot基礎知識,並幫助你編寫本身的應用程序。若是你是面向任務的開發人員,你可能想跳到spring.io和查看一些入門指南來解決具體的「我如何用Spring實現它?」的問題,咱們還有Spring boot特有的「How-to」參考文檔。
Spring Boot repository也有一些你能夠運行的示例,這些示例與代碼的其他部分無關(也就是說,你不須要構建其他的代碼來運行或使用示例)。