一些準備工作: 本節介紹如何開發一個簡單的“ Hello World!” Web應用程式,該應用程式重點介紹Spring Boot的一些關鍵功能。我們使用Maven來構建該項目,因為大多數IDE都支持它。 小貼士:spring.io網站包含許多使用Spring Boot的“入門”指南。如果您需要解決 ...
一些準備工作:
本節介紹如何開發一個簡單的“ Hello World!” Web應用程式,該應用程式重點介紹Spring Boot的一些關鍵功能。我們使用Maven來構建該項目,因為大多數IDE都支持它。
小貼士:spring.io網站包含許多使用Spring Boot的“入門”指南。如果您需要解決特定的問題,請首先檢查。通過轉到start.spring.io並從依賴項搜索器中選擇“ Web”啟動器,可以簡化以下步驟。這樣做會生成一個新的項目結構,以便您可以立即開始編碼。查看Spring Initializr文檔以獲取更多詳細信息。
在開始之前,請打開終端並運行以下命令,以確保全裝了有效的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
小貼士:該示例需要在其自己的文件夾中創建。隨後的說明假定您已經創建了一個合適的文件夾,並且它是當前目錄。
1. 創建POM
我們需要先創建一個Maven pom.xml
文件。pom.xml
是用於構建項目的配方。您可以選擇自己喜歡的文本編輯器並添加以下內容:
<?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.8.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
上面的清單應該為您提供了有效的構建。您可以通過運行mvn package
命令對其進行測試(目前,您可以將“ jar將為空-沒有內容標記為包含!”的警告忽略)。
此時,您可以將項目導入IDE(大多數現代Java IDE包含了對Maven的內置支持)。為簡單起見,我們在此示例中繼續使用純文本編輯器。
2. 添加類路徑依賴
Spring Boot提供了許多“啟動器”,使您可以將jar添加到類路徑中。我們的示例應用程式已經在POM的parent
部分中使用spring-boot-starter-parent
。spring-boot-starter-parent
是一個特殊的啟動器,提供有用的Maven預設值。它還提供了一個dependency-management
部分,以便您可以忽略“blessed”依賴項的version
標簽。
其他“啟動器”提供了在開發特定類型的應用程式時可能需要的依賴項。由於我們正在開發Web應用程式,因此我們添加了spring-boot-starter-web
依賴項。在此之前,我們可以通過運行以下命令來查看當前的狀態:
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree
命令會將項目依賴關係的樹形表示列印出來。您可以看到spring-boot-starter-parent
本身不提供任何依賴關係。要添加必要的依賴關係,請編輯pom.xml
併在 parent
部分的正下方添加spring-boot-starter-web
依賴關係:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
如果再次運行mvn dependency:tree
,則會看到現在還有許多其他依賴項,包括Tomcat Web伺服器和Spring Boot本身。
3. 編寫代碼
要完成我們的應用程式,我們需要創建一個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) { SpringApplication.run(Example.class, args); } }
儘管這裡沒有太多代碼,但是正在發生很多事情。我們將在接下來的幾節中逐步介紹重要部分。
3.1 @RestController 和@RequestMapping 註解
Example
類的第一個註解是 @RestController
。這被稱為構造型註解。它為人們閱讀代碼提供了提示,對於Spring來說,@RestController註解扮演了特定角色。在這個示例中,我們的類是一個Web請求控制器( @Controller
),因此Spring在處理傳入的Web請求時會考慮使用它。
@RequestMapping註解提供“路由”信息。它告訴Spring,任何帶有 /
的HTTP請求都將被映射到 home
方法。@RestController註解告訴Spring將結果字元串直接呈現給調用方。
小貼士: @RestController
和@RequestMapping
註解是Spring MVC註解(它們不是特定於Spring Boot的)。有關更多詳細信息,請參見Spring參考文檔中的MVC部分。
3.2 @EnableAutoConfiguration註解
第二個類級別的註解是 @EnableAutoConfiguration
。這個註解告訴Spring Boot根據您所添加的jar依賴去“猜測”您如何配置Spring。由於spring-boot-starter-web
添加了Tomcat和Spring MVC,因此auto-configuration假定您正在開發Web應用程式並相應地設置Spring。
啟動器和自動配置(Starters and Auto-configuration)
自動配置旨在與“啟動器”配合使用,但是這兩個概念並沒有直接聯繫在一起。您可以在啟動程式之外自由選擇jar依賴項。Spring Boot仍會盡其所能自動配置您的應用程式。
3.3 main方法
我們應用程式的最後一部分是main
方法。這隻是遵循Java約定的應用程式入口的標準方法。我們的主要方法通過調用 run
委托給Spring Boot的SpringApplication
類。SpringApplication
會引導我們的應用程式,並啟動Spring,後者反過來又會啟動自動配置的Tomcat Web伺服器。我們需要將 Example.class
作為參數傳遞給 run
方法,以告訴 SpringApplication
哪個是主要的Spring組件。 args
參數數組也被傳遞給命令行參數。
4. 運行示例
此時,您的應用程式應該可以工作了。由於您使用了 spring-boot-starter-parent
t的POM,因此您具有一個有用的運行目標,可以用來啟動該應用程式。打開cmd視窗併進入項目根目錄,鍵入 mvn spring-boot:run
以啟動應用程式。您應該看到類似於以下的輸出:
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.8.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
在Web瀏覽器中訪問 localhost:8080
,則應該看到以下輸出:
Hello World!
要正常退出該應用程式,請按 ctrl-c
5. 創建一個可執行的Jar
通過創建可以在生產環境中運行的完全獨立的可執行jar文件來結束示例。可執行jar(有時稱為“fat jars”)是包含您的已編譯類以及代碼需要運行的所有jar依賴項的歸檔文件。
可執行jar和Java(Executable jars and Java)
Java沒有提供載入嵌套jar文件(jar中本身包含的jar文件)的標準方法。如果您要分發獨立的應用程式,則可能會出現問題。
為瞭解決這個問題,許多開發人員使用“uber” jars。uber jar將來自應用程式所有依賴項的所有類打包到一個存檔中。這種方法的問題在於,很難查看應用程式中包含哪些庫。
如果在多個jar中使用相同的文件名(但具有不同的內容),也可能會產生問題。
Spring Boot採用了different approach,實際上允許您直接嵌套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-par
的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.1.8.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
如果查看target
目錄,則應該看到 myproject-0.0.1-SNAPSHOT.jar
。該文件的大小應為10 MB左右。如果想窺探內部,可以使用jar tvf,如下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
您還將在target
目錄中看到一個名為 myproject-0.0.1-SNAPSHOT.jar.original
的小得多的文件。這是Maven在Spring Boot重新打包之前創建的原始jar文件。
要運行該應用程式,請使用java -jar
命令,如下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.8.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)
和以前一樣,要退出該應用程式,請按 ctrl-c
.
如果查看目標目錄,則應該看到myproject-0.0.1-SNAPSHOT.jar。該文件的大小應為10 MB左右。如果想窺視內部,可以使用jar tvf,如下所示: