第 1 章 · Spring Boot 3 入门与项目结构
本章目标:理解 Spring Boot 3 约定优于配置理念;使用 Spring Initializr 创建虚构练习项目 shop-spring-demo;读懂 Maven 标准目录、@SpringBootApplication 启动类与 application.yml 配置;能用对照表说明 Spring Boot 与 shop-demo(Django) 在项目结构、启动方式、配置分层上的差异;完成最小可运行 Web 应用并访问健康检查端点。
学时建议:4~5 小时(含 1.5 小时跟练)
前置:完成 java-dev 全模块(JDK 17+、Maven、类与包、集合、异常处理);了解 HTTP 基本概念;学过 django-web ch01 更佳但非必须。
1.1 场景说明:为什么需要 shop-spring-demo?
你在 django-web 中用 shop-demo 搭建了 Python 电商后台。现在团队要在 Java 技术栈交付一套企业级 Web 后台,对外 API 规划域名为虚构的 https://api.example.com(教学占位,非真实生产地址),项目代号 shop-spring-demo。
| 维度 | shop-demo(Django) | shop-spring-demo(Spring Boot) |
|---|---|---|
| 语言 | Python 3 | Java 17+ / 21 LTS |
| 构建工具 | pip + requirements.txt | Maven / Gradle |
| 启动入口 | manage.py runserver | ShopSpringDemoApplication.main |
| 配置 | settings.py + .env | application.yml + profile |
| 依赖注入 | 较少显式 DI | IoC 容器(ch02 详讲) |
| 默认端口 | 8000 | 8080 |
| 适合场景 | 快速全栈后台 | 企业 Java、微服务、与现有 Java 资产集成 |
说明:本章所有路径、域名、密钥均为教学虚构,不涉及任何真实公司仓库、内部配置或生产密钥。
学习路径(spring-boot-web)
ch01 入门与结构 → ch02 IoC/DI → ch03 MVC → ch04 Thymeleaf
↑ 你在这里
前置:java-dev 全模块
1.2 Spring Boot 3 与 Spring Framework 关系
| 层次 | 职责 | shop-spring-demo 中的体现 |
|---|---|---|
| Spring Framework | IoC、AOP、MVC、事务等核心 | 由 Boot 自动装配,无需手写 XML |
| Spring Boot | 自动配置、内嵌 Tomcat、Starter | @SpringBootApplication 一键启动 |
| Spring Boot 3.x | 基线 Jakarta EE 9+(javax. → jakarta.) | 与 Boot 2.x 包名不同,本章统一 3.x |
为何选 Spring Boot 3:长期支持 JDK 17+、原生镜像(GraalVM)友好、与 Spring Security 6、Spring Data 3 对齐;新项目应直接选 3.x。
1.2.1 与 Django 哲学对照
| 对比项 | Django | Spring Boot |
|---|---|---|
| 设计哲学 | Batteries included、MTV | 约定优于配置、按需引入 Starter |
| 项目生成 | django-admin startproject | Initializr / IDE 向导 |
| 热重载 | runserver 自动 | spring-boot-devtools(可选) |
| ORM | Django ORM | Spring Data JPA(ch05) |
| 模板 | Django Templates | Thymeleaf(ch04) |
| Admin | 内置 Admin | 需自建或第三方(本课程自建页面) |
1.3 环境准备
1.3.1 JDK 与 Maven
与 java-dev 相同,确认版本:
java -version
# 应显示 17 或 21,例如 openjdk version "21.0.x"
mvn -version
# Apache Maven 3.9.x,Java version: 21
推荐 IDE:IntelliJ IDEA Community 或 VS Code + Extension Pack for Java。
1.3.2 目录规划
~/java-learn/
├── shop-spring-demo/ ← 本章新建
└── (其他 java-dev 练习)
勿与 Django 的 shopdemo Python 项目混在同一目录,避免工具链混淆。
1.4 使用 Spring Initializr 创建项目
访问 https://start.spring.io(官方生成器,教学环境可离线用 IDE 等价向导)。
1.4.1 生成参数建议
| 选项 | 推荐值 | 说明 |
|---|---|---|
| Project | Maven | 与 java-dev 一致 |
| Language | Java | — |
| Spring Boot | 3.4.x(稳定版) | 选 3.x 最新稳定 |
| Group | com.example.shop | 包名前缀 |
| Artifact | shop-spring-demo | 项目名 |
| Name | shop-spring-demo | — |
| Package name | com.example.shop | — |
| Packaging | Jar | 可执行 fat jar |
| Java | 21(或 17) | 与本地 JDK 一致 |
1.4.2 依赖(Dependencies)
本章最小集合:
| Starter | 作用 |
|---|---|
| Spring Web | Spring MVC、内嵌 Tomcat、REST |
| Spring Boot DevTools | 开发热重启(可选) |
| Lombok | 减少样板代码(可选,后续章节会用) |
点击 Generate 下载 zip,解压到 ~/java-learn/shop-spring-demo。
1.4.3 命令行等价(可选)
curl -G https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=3.4.0 \
-d baseDir=shop-spring-demo \
-d groupId=com.example.shop \
-d artifactId=shop-spring-demo \
-d name=shop-spring-demo \
-d packageName=com.example.shop \
-d javaVersion=21 \
-d dependencies=web,devtools,lombok \
-o shop-spring-demo.zip
1.5 项目结构详解
解压后的标准 Maven 布局:
shop-spring-demo/
├── pom.xml
├── mvnw / mvnw.cmd # Maven Wrapper
├── src/
│ ├── main/
│ │ ├── java/com/example/shop/
│ │ │ └── ShopSpringDemoApplication.java
│ │ └── resources/
│ │ ├── application.yml ← 本章重点
│ │ ├── static/ ← CSS/JS/图片
│ │ └── templates/ ← Thymeleaf(ch04)
│ └── test/java/.../
└── target/ ← 编译输出,勿提交 Git
1.5.1 与 shop-demo 目录对照
| shop-demo(Django) | shop-spring-demo | 职责 |
|---|---|---|
manage.py | ShopSpringDemoApplication + mvnw | 程序入口 |
shopdemo/settings.py | application.yml | 全局配置 |
shopdemo/urls.py | @RequestMapping / @GetMapping(ch03) | 路由 |
catalog/ App | catalog 包(后续拆分) | 业务模块 |
templates/ | resources/templates/ | 页面模板 |
static/ | resources/static/ | 静态资源 |
requirements.txt | pom.xml | 依赖声明 |
1.5.2 启动类
package com.example.shop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ShopSpringDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ShopSpringDemoApplication.class, args);
}
}
@SpringBootApplication 是三个注解的组合:
@Configuration:当前类可作为配置源@EnableAutoConfiguration:启用自动配置(classpath 上的 Starter)@ComponentScan:扫描com.example.shop及子包下的 Bean
等价于 Django 的「加载 settings + 注册 App + 启动 WSGI」的合并入口。
1.5.3 pom.xml 核心片段
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</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>
spring-boot-starter-parent 统一管理依赖版本,类似 Django 锁定 Django>=4.2,<5 的 BOM 思想。