开发你的第一个 Spring Boot 应用程序
本节将介绍如何开发一个简单的“Hello World!” Web 应用程序,以此展示 Spring Boot 的一些核心特性。你可以根据偏好选择 Maven 或 Gradle 作为构建系统。
提示
你可以访问 start.spring.io 并选择 "Web" Starter 来快速生成项目结构,从而直接跳过繁琐的配置阶段,直接开始编码。
1. 环境准备
在开始之前,请确保你已安装了符合要求的 Java 版本(17 或更高):
$ java -version
# 输出应显示 openjdk 17+2. 项目搭建
我们需要创建一个最基础的项目配置文件。
<?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.1</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>plugins {
id 'java'
id 'org.springframework.boot' version '4.0.1'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}3. 编写代码
创建目录结构 src/main/java/com/example/,并新建文件 MyApplication.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);
}
}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: 告诉 Spring 这个类是一个 Web 控制器,方法的返回值将直接作为 HTTP 响应体发送给客户端。
- @SpringBootApplication: 一个复合注解,包含了自动配置(
@EnableAutoConfiguration)、组件扫描(@ComponentScan)和配置类定义。它是 Spring Boot 应用的核心入口标识。 - @RequestMapping("/"): 将路径为
/的 HTTP 请求映射到home方法上。
4. 运行与验证
在项目根目录下,执行以下命令启动应用:
$ mvn spring-boot:run$ ./gradlew bootRun启动完成后,打开浏览器访问 http://localhost:8080,你应该能看到页面显示: Hello World!
5. 打包成可执行 JAR
Spring Boot 可以将应用及其所有依赖打包成一个单一的“胖 JAR(Fat Jar)”。
$ mvn package
# 生成文件:target/myproject-0.0.1-SNAPSHOT.jar$ ./gradlew bootJar
# 生成文件:build/libs/myproject-0.0.1-SNAPSHOT.jar要运行这个 JAR 文件,只需使用标准的 Java 命令: java -jar <文件名>.jar
补充教学
1. 为什么 8080 端口被占用了?
默认情况下,Spring Boot 嵌入的 Tomcat 监听 8080 端口。如果该端口被其他应用占用,你可以在 src/main/resources/application.properties 中添加 server.port=8081 来更改端口。
2. 理解 @SpringBootApplication 的魔力
当你启动应用时,Spring Boot 会扫描当前类所在的包及其子包。如果你的项目结构层次太深或类放在了错误的包下,可能会导致控制器无法被发现。这也是为什么我们建议将启动类放在项目的根包(Root Package)下。
3. Maven POM 中的 Parent 是必须的吗?
不是必须的,但强烈推荐。spring-boot-starter-parent 预设了大量的库版本、资源过滤配置以及插件默认设置。如果你无法继承它(比如公司有自己的 Parent),你可以通过 dependencyManagement 引入 spring-boot-dependencies 来获取同样的版本管理能力。
4. 什么是热部署 (DevTools)?
在开发过程中,频繁手动重启是很低效的。你可以添加 spring-boot-devtools 依赖,它会监控文件变化并自动触发轻量级的应用重启,让你的修改即时生效。