開發您的第一個 Spring Boot 應用程式
本節描述如何開發一個小型“Hello World!” Web 應用程式,該應用程式突出顯示了 Spring Boot 的一些主要功能。您可以選擇 Maven 或 Gradle 作為構建系統。
|
您可以透過訪問 start.spring.io 並從依賴項搜尋器中選擇“Web”啟動器來縮短以下步驟。這樣做會生成一個新的專案結構,以便您可以立即開始編碼。有關更多詳細資訊,請檢視 start.spring.io 使用者指南。 |
先決條件
在開始之前,開啟終端並執行以下命令以確保您安裝了有效版本的 Java
$ java -version
openjdk version "17.0.16" 2025-07-15 LTS
OpenJDK Runtime Environment (build 17.0.16+12-LTS)
OpenJDK 64-Bit Server VM (build 17.0.16+12-LTS, mixed mode, sharing)
| 此示例需要在其自己的目錄中建立。後續說明假定您已建立了合適的目錄並且該目錄是您的當前目錄。 |
Maven
如果您想使用 Maven,請確保您已安裝 Maven
$ mvn -v
Apache Maven 3.9.11 (3e54c93a704957b63ee3494413a2b544fd3d825b)
Maven home: /Users/developer/.sdkman/candidates/maven/current
Java version: 17.0.16, vendor: BellSoft, runtime: /Users/developer/.sdkman/candidates/java/17.0.16-librca
Gradle
如果您想使用 Gradle,請確保您已安裝 Gradle
$ gradle --version
------------------------------------------------------------
Gradle 8.14.3
------------------------------------------------------------
Build time: 2025-07-04 13:15:44 UTC
Revision: e5ee1df3d88b8ca3a8074787a94f373e3090e1db
Kotlin: 2.0.21
Groovy: 3.0.24
Ant: Apache Ant(TM) version 1.10.15 compiled on August 25 2024
Launcher JVM: 17.0.16 (BellSoft 17.0.16+12-LTS)
Daemon JVM: /Users/developer/.sdkman/candidates/java/17.0.16-librca (no JDK specified, using current Java home)
OS: Mac OS X 15.7.1 aarch64
使用 Maven 設定專案
我們需要首先建立一個 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>4.0.0</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
前面的清單應該能為您提供一個可工作的構建。
您可以透過執行 mvn package 來測試它(目前,您可以忽略“jar 將為空 - 沒有內容被標記為包含!”警告)。
| 此時,您可以將專案匯入到 IDE 中(大多數現代 Java IDE 都包含對 Maven 的內建支援)。為簡單起見,我們繼續使用純文字編輯器來處理此示例。 |
使用 Gradle 設定專案
我們需要首先建立一個 Gradle build.gradle 檔案。build.gradle 是用於構建專案的構建指令碼。開啟您喜歡的文字編輯器並新增以下內容
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.0'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
}
前面的清單應該能為您提供一個可工作的構建。您可以透過執行 gradle classes 來測試它。
| 此時,您可以將專案匯入到 IDE 中(大多數現代 Java IDE 都包含對 Gradle 的內建支援)。為簡單起見,我們繼續使用純文字編輯器來處理此示例。 |
新增類路徑依賴項
Spring Boot 提供了許多啟動器,可讓您將 jar 新增到類路徑中。啟動器提供了您在開發特定型別的應用程式時可能需要的依賴項。
Maven
大多數 Spring Boot 應用程式在 POM 的 parent 部分使用 spring-boot-starter-parent。spring-boot-starter-parent 是一個特殊的啟動器,它提供了有用的 Maven 預設值。它還提供了一個 dependency-management 部分,以便您可以省略“受祝福”依賴項的 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 本身。
Gradle
大多數 Spring Boot 應用程式都使用 org.springframework.boot Gradle 外掛。此外掛提供了有用的預設值和 Gradle 任務。io.spring.dependency-management Gradle 外掛提供了 依賴項管理,以便您可以省略“受祝福”依賴項的 version 標籤。
由於我們正在開發一個 Web 應用程式,因此我們添加了 spring-boot-starter-web 依賴項。在此之前,我們可以透過執行以下命令檢視我們目前擁有的內容
$ gradle dependencies
> Task :dependencies
------------------------------------------------------------
Root project 'myproject'
------------------------------------------------------------
gradle dependencies 命令列印專案依賴項的樹形表示。目前,專案沒有依賴項。要新增必要的依賴項,請編輯您的 build.gradle 並在 dependencies 部分中新增 spring-boot-starter-web 依賴項
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
如果您再次執行 gradle dependencies,您會看到現在有許多額外的依賴項,包括 Tomcat Web 伺服器和 Spring Boot 本身。
編寫程式碼
要完成我們的應用程式,我們需要建立一個 Java 檔案。預設情況下,Maven 和 Gradle 從 src/main/java 編譯原始碼,因此您需要建立該目錄結構,然後新增一個名為 src/main/java/com/example/MyApplication.java 的檔案以包含以下程式碼
-
Java
-
Kotlin
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class MyApplication {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
package com.example
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@SpringBootApplication
class MyApplication {
@RequestMapping("/")
fun home() = "Hello World!"
}
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
儘管這裡的程式碼不多,但正在發生的事情卻很多。我們將在接下來的幾節中逐步介紹重要的部分。
@RestController 和 @RequestMapping 註解
我們的 MyApplication 類上的第一個註解是 @RestController。這被稱為原型註解。它為閱讀程式碼的人和 Spring 提供了提示,說明該類扮演著特定的角色。在這種情況下,我們的類是一個 Web @Controller,因此 Spring 在處理傳入的 Web 請求時會考慮它。
@RequestMapping 註解提供了“路由”資訊。它告訴 Spring,任何路徑為 / 的 HTTP 請求都應該對映到 home 方法。@RestController 註解告訴 Spring 將結果字串直接渲染回撥用者。
@RestController 和 @RequestMapping 註解是 Spring MVC 註解(它們不是 Spring Boot 特有的)。有關更多詳細資訊,請參閱 Spring 參考文件中的 MVC 部分。 |
@SpringBootApplication 註解
第二個類級別註解是 @SpringBootApplication。此註解被稱為元註解,它結合了 @SpringBootConfiguration、@EnableAutoConfiguration 和 @ComponentScan。
其中,我們最感興趣的註解是 @EnableAutoConfiguration。@EnableAutoConfiguration 告訴 Spring Boot 根據您新增的 jar 依賴項“猜測”您希望如何配置 Spring。由於 spring-boot-starter-web 添加了 Tomcat 和 Spring MVC,因此自動配置假定您正在開發 Web 應用程式並相應地設定 Spring。
“main”方法
我們應用程式的最後一部分是 main 方法。這是一個遵循 Java 應用程式入口點約定的標準方法。我們的 main 方法透過呼叫 run 將委託給 Spring Boot 的 SpringApplication 類。SpringApplication 引導我們的應用程式,啟動 Spring,Spring 又啟動自動配置的 Tomcat Web 伺服器。我們需要將 MyApplication.class 作為引數傳遞給 run 方法,以告知 SpringApplication 哪個是主要的 Spring 元件。args 陣列也一併傳遞,以公開任何命令列引數。
執行示例
Maven
此時,您的應用程式應該可以工作。由於您使用了 spring-boot-starter-parent POM,因此您有一個有用的 run 目標,您可以使用它來啟動應用程式。從根專案目錄中鍵入 mvn spring-boot:run 以啟動應用程式。您應該會看到類似於以下內容的輸出
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)
如果您在 Web 瀏覽器中開啟 localhost:8080,您應該會看到以下輸出
Hello World!
要優雅地退出應用程式,請按 ctrl-c。
Gradle
此時,您的應用程式應該可以工作。由於您使用了 org.springframework.boot Gradle 外掛,因此您有一個有用的 bootRun 目標,您可以使用它來啟動應用程式。從根專案目錄中鍵入 gradle bootRun 以啟動應用程式。您應該會看到類似於以下內容的輸出
$ gradle bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)
如果您在 Web 瀏覽器中開啟 localhost:8080,您應該會看到以下輸出
Hello World!
要優雅地退出應用程式,請按 ctrl-c。
建立可執行 Jar
我們透過建立一個完全自包含的可執行 jar 檔案來完成示例,我們可以在生產環境中執行該檔案。可執行 jar(有時稱為“uber jar”或“fat jar”)是包含您編譯的類以及程式碼執行所需的所有 jar 依賴項的存檔。
Maven
要建立可執行 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:4.0.0:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果您檢視 target 目錄,您應該會看到 myproject-0.0.1-SNAPSHOT.jar。該檔案的大小應該在 18 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 :: (v4.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)
如前所述,要退出應用程式,請按 ctrl-c。
Gradle
要建立可執行 jar,我們需要從命令列執行 gradle bootJar,如下所示
$ gradle bootJar
BUILD SUCCESSFUL in 639ms
3 actionable tasks: 3 executed
如果您檢視 build/libs 目錄,您應該會看到 myproject-0.0.1-SNAPSHOT.jar。該檔案的大小應該在 18 MB 左右。如果您想檢視內部,可以使用 jar tvf,如下所示
$ jar tvf build/libs/myproject-0.0.1-SNAPSHOT.jar
要執行該應用程式,請使用 java -jar 命令,如下所示
$ java -jar build/libs/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v{version-spring-boot})
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)
如前所述,要退出應用程式,請按 ctrl-c。