Appearance
🚀 开发你的第一个 Spring Boot 应用程序
本章节将指导您开发一个简单的"Hello World!"Web 应用程序,通过这个实例来体验 Spring Boot 的核心特性。您可以选择 Maven 或 Gradle 作为构建系统。
快速上手建议:您可以直接访问 [start.spring.io](https://start.spring.io) 并选择"Web"启动器来快速生成项目结构,这样就可以立即开始编码了!
📋 前置条件
在开始之前,我们需要确保开发环境已经准备就绪。
Java 环境检查
首先检查您的 Java 版本,确保已安装 Java 17 或更高版本:
bash
java -version
期望输出类似:
openjdk version "17.0.4.1" 2022-08-12 LTS
OpenJDK Runtime Environment (build 17.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM (build 17.0.4.1+1-LTS, mixed mode, sharing)
本示例需要在独立的目录中创建。后续指令假设您已经创建了合适的目录并将其设为当前目录。
Maven 环境检查
如果您选择使用 Maven,请确保已安装 Maven:
bash
mvn -v
期望输出类似:
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: usr/Users/developer/tools/maven/3.8.5
Java version: 17.0.4.1, vendor: BellSoft
Gradle 环境检查
如果您选择使用 Gradle,请确保已安装 Gradle:
bash
gradle --version
期望输出类似:
------------------------------------------------------------
Gradle 8.1.1
------------------------------------------------------------
Build time: 2023-04-21 12:31:26 UTC
Kotlin: 1.8.10
Groovy: 3.0.15
JVM: 17.0.7 (BellSoft 17.0.7+7-LTS)
🔧 项目构建配置
Maven 配置
创建 Maven 项目的核心是pom.xml
文件,它是构建项目的配方。
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>3.5.0</version>
</parent>
<!-- 其他配置将在这里添加... -->
</project>
您可以通过运行 `mvn package` 来测试构建是否正常工作(现在可以忽略"jar will be empty"的警告)。
Gradle 配置
创建 Gradle 项目需要build.gradle
文件,它是构建脚本:
bash
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.0'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
}
TIP
您可以通过运行 gradle classes
来测试构建是否正常工作。
📦 添加依赖项
Spring Boot 提供了多种启动器(Starters),让您可以轻松地向类路径添加所需的 jar 包。启动器为特定类型的应用程序开发提供了常用的依赖项。
Spring Boot Starters 概念图
Maven 依赖配置
由于我们要开发 Web 应用程序,需要添加spring-boot-starter-web
依赖。
首先,让我们查看当前的依赖情况:
bash
mvn dependency:tree
输出:
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
现在添加 Web 启动器依赖:
xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
> `spring-boot-starter-parent`提供了依赖管理,所以您不需要指定"blessed"依赖项的版本标签。
Gradle 依赖配置
同样,对于 Gradle 项目,我们需要添加 Web 启动器:
bash
gradle dependencies
添加依赖项:
bash
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
添加依赖后,再次运行依赖命令,您会看到现在包含了许多额外的依赖项,包括 Tomcat Web 服务器和 Spring Boot 本身。
💻 编写代码
现在是时候编写实际的应用程序代码了!我们需要创建一个 Java 或 Kotlin 文件。
项目结构
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── MyApplication.java (或 MyApplication.kt)
│ └── resources/
└── test/
└── java/
应用程序主类
kotlin
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)
}
java
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);
}
}
虽然代码不多,但包含了很多重要的概念。让我们逐一解析关键部分。
核心注解解析
@RestController 和 @RequestMapping
@RestController: 这是一个构造型注解,它为阅读代码的人和 Spring 框架提供提示,表明该类扮演特定角色。在这种情况下,我们的类是一个 Web 控制器。
@RequestMapping: 提供"路由"信息,告诉 Spring 任何带有
/
路径的 HTTP 请求都应该映射到home
方法。
> `@RestController`注解告诉 Spring 将结果字符串直接渲染返回给调用者,这是构建 REST API 的常用方式。
@SpringBootApplication 注解
@SpringBootApplication
是一个元注解,它组合了以下三个注解:
- @SpringBootConfiguration: 标识配置类
- @EnableAutoConfiguration: 启用自动配置
- @ComponentScan: 启用组件扫描
> **@EnableAutoConfiguration**是最重要的注解,它告诉 Spring Boot 根据您添加的 jar 依赖项"猜测"您想要如何配置 Spring。由于我们添加了`spring-boot-starter-web`,自动配置会认为您正在开发 Web 应用程序并相应地设置 Spring。
INFO
启动器和自动配置自动配置设计为与启动器很好地配合工作,但这两个概念并不直接绑定。您可以自由选择启动器之外的 jar 依赖项,Spring Boot 仍会尽力自动配置您的应用程序。
main 方法
应用程序的最后一部分是main
方法,这是遵循 Java 应用程序入口点约定的标准方法。
kotlin
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
在 Kotlin 中,我们使用runApplication
函数来启动 Spring Boot 应用程序。这个函数:
- 引导我们的应用程序
- 启动 Spring 框架
- 启动自动配置的 Tomcat Web 服务器
- 接收命令行参数
🚀 运行应用程序
Maven 运行方式
由于使用了spring-boot-starter-parent
POM,您可以使用有用的run
目标来启动应用程序:
bash
mvn spring-boot:run
您应该看到类似以下的输出:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _' | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.0)
........ Started MyApplication in 0.906 seconds
Gradle 运行方式
使用 Gradle 插件,您可以使用bootRun
任务:
bash
gradle bootRun
访问应用程序
打开 Web 浏览器访问 http://localhost:8080,您应该看到:
Hello World!
要优雅地退出应用程序,请按 `Ctrl+C`。
📦 创建可执行 Jar 包
在实际业务场景中,我们通常需要将应用程序打包成可执行的 jar 文件以便在生产环境中运行。
可执行 Jar 的概念
可执行 jar(有时称为"uber jars"或"fat jars")是包含编译的类以及代码运行所需的所有 jar 依赖项的归档文件。
> **Java 的限制**: Java 没有提供加载嵌套 jar 文件的标准方法。Spring Boot 采用了不同的方法,允许您直接嵌套 jar 文件。
Maven 打包
要创建可执行 jar,需要将spring-boot-maven-plugin
添加到pom.xml
中:
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
运行打包命令:
bash
mvn package
打包成功后的输出:
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO] --- spring-boot-maven-plugin:3.5.0:repackage (default) @ myproject ---
[INFO] BUILD SUCCESS
您会在target
目录中看到:
myproject-0.0.1-SNAPSHOT.jar
(约 18MB) - 可执行 jarmyproject-0.0.1-SNAPSHOT.jar.original
- Maven 创建的原始 jar
Gradle 打包
对于 Gradle 项目,运行:
bash
gradle bootJar
您会在build/libs
目录中找到生成的 jar 文件。
运行可执行 Jar
使用以下命令运行应用程序:
bash
java -jar target/myproject-0.0.1-SNAPSHOT.jar
# 或者对于Gradle
java -jar build/libs/myproject-0.0.1-SNAPSHOT.jar
📚 实际业务场景应用
场景 1:企业级 REST API 服务
在实际企业开发中,这个简单的"Hello World"应用程序可以扩展为:
kotlin
@RestController
@RequestMapping("/api/v1")
class UserController {
@GetMapping("/users")
fun getAllUsers(): List<User> {
// 返回用户列表
}
@PostMapping("/users")
fun createUser(@RequestBody user: User): User {
// 创建新用户
}
@GetMapping("/health")
fun healthCheck() = mapOf("status" to "UP", "timestamp" to System.currentTimeMillis())
}
场景 2:微服务架构
在微服务架构中,每个服务都可以是一个独立的 Spring Boot 应用程序:
🎯 最佳实践和注意事项
> **端口冲突**: 默认情况下,Spring Boot 应用程序在 8080 端口运行。如果该端口被占用,您可以通过`application.properties`文件更改端口:
properties
server.port=8090
> **内存使用**: 可执行 jar 文件包含所有依赖项,因此文件大小较大。在生产环境中部署时要考虑内存和存储需求。
📖 总结
通过这个简单的"Hello World"示例,我们学习了:
- ✅ 环境准备: Java、Maven/Gradle 的安装和配置
- ✅ 项目配置: 理解
pom.xml
和build.gradle
的作用 - ✅ 依赖管理: Spring Boot 启动器的概念和使用
- ✅ 核心注解:
@SpringBootApplication
、@RestController
、@RequestMapping
- ✅ 应用程序运行: 开发期间和生产环境的不同运行方式
- ✅ 打包部署: 创建可执行 jar 文件的方法
这个基础示例为更复杂的 Spring Boot 应用程序开发奠定了坚实的基础。在后续的学习中,我们将在此基础上添加数据库集成、安全性、测试等更多功能。
> **下一步建议**: 尝试修改返回的消息,添加更多的端点,或者集成数据库来存储和检索数据。每一步的实践都会让您对 Spring Boot 有更深入的理解!