Spring Boot

Spring Boot 快速入门指南

从零构建生产级 Java 后端服务

入门 25 分钟 2026-03-15

涉及技术

Java 17 Spring Boot 3.x Maven JUnit 5

文档简介

手把手带你从零搭建 Spring Boot 项目,涵盖依赖管理、配置分层、RESTful API 设计、统一异常处理与日志规范,适合初学者快速上手。

正文内容

什么是 Spring Boot

Spring Boot 是 Spring 框架的扩展,旨在简化新 Spring 应用的初始搭建和开发过程。它采用"约定优于配置"的理念,通过自动配置和起步依赖,让你可以在几分钟内创建一个可运行的、生产级的 Spring 应用,而无需编写大量的样板代码和 XML 配置。

搭建开发环境

在开始之前,请确保已安装以下工具:

  • JDK 17 或更高版本(推荐使用 Eclipse Temurin 或 Amazon Corretto)
  • Apache Maven 3.9+ 或 Gradle 8+
  • IntelliJ IDEA(社区版或 Ultimate 版均可)

创建第一个 Spring Boot 项目

最简单的方式是使用 Spring Initializr(https://start.spring.io)。选择以下配置:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.x
  • Dependencies: Spring Web, Spring Data JPA, H2 Database

项目结构解析

标准的 Spring Boot 项目采用分层架构,各层职责清晰:

src/main/java/com/example/demo/
├── DemoApplication.java      启动类
├── config/                   配置类
├── controller/               控制器层(REST API)
├── service/                  业务逻辑层
│   └── impl/                 实现类
├── repository/               数据访问层
├── entity/                   实体类(ORM 映射)
├── dto/                      数据传输对象
├── exception/                自定义异常
└── util/                     工具类

src/main/resources/
├── application.yml           主配置文件
├── application-dev.yml       开发环境配置
├── application-prod.yml      生产环境配置
└── static/                   静态资源

核心概念:依赖注入

Spring Boot 的核心是控制反转(IoC)容器。通过 @Autowired 或构造函数注入,容器会自动装配所需的 Bean:

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User findById(Long id) {
        return userRepository.findById(id)
            .orElseThrow(() -> new ResourceNotFoundException("User not found"));
    }
}

配置分层管理

使用多环境配置文件实现不同环境的差异化管理:

# application.yml(公共配置)
spring:
  profiles:
    active: dev
  application:
    name: demo-service

---
# application-dev.yml(开发环境)
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true

---
# application-prod.yml(生产环境)
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/prod_db
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: validate

统一异常处理

使用 @RestControllerAdvice 实现全局异常拦截,保证 API 返回格式统一:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ApiResponse<?>> handleNotFound(ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND)
            .body(ApiResponse.error(ex.getMessage(), HttpStatus.NOT_FOUND.value()));
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<ApiResponse<?>> handleValidation(MethodArgumentNotValidException ex) {
        String message = ex.getBindingResult().getFieldErrors().stream()
            .map(error -> error.getField() + ": " + error.getDefaultMessage())
            .collect(Collectors.joining(", "));
        return ResponseEntity.badRequest()
            .body(ApiResponse.error(message, HttpStatus.BAD_REQUEST.value()));
    }
}

日志规范

统一使用 SLF4J + Logback,避免直接调用 System.out.println

@Slf4j
@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public ApiResponse<User> getUser(@PathVariable Long id) {
        log.info("Fetching user with id: {}", id);
        User user = userService.findById(id);
        log.debug("User found: {}", user);
        return ApiResponse.success(user);
    }
}

打包与运行

Spring Boot 应用可以打包为可执行的 JAR 文件,内置 Tomcat,无需外部部署:

# 打包
mvn clean package -DskipTests

# 运行
java -jar target/demo-0.0.1-SNAPSHOT.jar

# 或直接使用 Maven 插件
mvn spring-boot:run