【Spring】系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成

发布于:2025-06-24 ⋅ 阅读:(11) ⋅ 点赞:(0)

系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成,结合最新官方实践(基于 Spring Boot 3.x+),附完整代码示例和文档生成指南。内容综合权威资料整理,建议收藏备用!

🛠️ 一、环境搭建与项目创建

1. 开发环境准备

  • JDK:推荐 JDK 17+(下载地址
  • 构建工具:Maven 或 Gradle(以 Maven 为例)
    <properties>
        <java.version>17</java.version>
        <spring-boot.version>3.2.4</spring-boot.version>
    </properties>
    
  • IDE:IntelliJ IDEA(内置 Spring Initializr)

2. 创建第一个项目(Spring Initializr)

  1. 访问 start.spring.io
  2. 选择配置:
    • Project:Maven
    • Language:Java
    • DependenciesSpring Web, Spring Data JPA, MySQL Driver
  3. 生成项目并解压,用 IDEA 打开。

🚀 二、核心功能开发

1. RESTful API 开发

// 控制器示例
@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        return ResponseEntity.ok(user);
    }

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.save(user);
        return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
    }
}

注解解析

  • @RestController:组合 @Controller + @ResponseBody
  • @GetMapping:定义 GET 请求端点

2. 数据持久化(Spring Data JPA)

// 实体类
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
}

// Repository 接口
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByNameContaining(String keyword); // 自动实现查询
}

3. 配置文件多环境切换

# application-dev.yml
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: dev_user

# application-prod.yml
server:
  port: 80
spring:
  datasource:
    url: jdbc:mysql://prod-server:3306/prod_db

激活环境:spring.profiles.active=dev


⚙️ 三、进阶实战技巧

1. 全局异常处理

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
        ErrorResponse error = new ErrorResponse("NOT_FOUND", ex.getMessage());
        return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
    }
}

2. 拦截器实现(日志记录)

@Component
public class LogInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        log.info("Request URL: {}", request.getRequestURL());
        return true;
    }
}

// 注册拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LogInterceptor logInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(logInterceptor);
    }
}

作用:记录请求日志、权限校验等

3. 缓存集成(Redis)

# application.yml
spring:
  cache:
    type: redis
  redis:
    host: localhost
    port: 6379
@Service
public class ProductService {
    @Cacheable(value = "products", key = "#id")
    public Product getProductById(Long id) {
        // 数据库查询
    }
}

📑 四、API 文档自动生成(Swagger)

1. 添加依赖

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.5.0</version>
</dependency>

2. 配置 Swagger

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("电商平台 API").version("1.0"));
    }
}

3. 注解标注接口

@Operation(summary = "创建订单")
@PostMapping("/orders")
public Order createOrder(@RequestBody OrderRequest request) {
    // 业务逻辑
}

访问文档:http://localhost:8080/swagger-ui.html


🚢 五、部署与监控

1. 打包与运行

mvn clean package  # 生成 target/*.jar
java -jar your-app.jar --spring.profiles.active=prod

2. Actuator 健康监控

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置端点暴露:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics

访问:http://localhost:8080/actuator/health


📊 六、实战案例:电商平台 API

// 商品下单逻辑
@Transactional
public Order placeOrder(OrderDTO orderDTO) {
    // 1. 校验库存
    Product product = productRepository.findById(orderDTO.getProductId())
        .orElseThrow(() -> new ResourceNotFoundException("商品不存在"));
    if (product.getStock() < orderDTO.getQuantity()) {
        throw new BusinessException("库存不足");
    }

    // 2. 扣减库存
    product.setStock(product.getStock() - orderDTO.getQuantity());
    productRepository.save(product);

    // 3. 创建订单
    Order order = new Order();
    order.setProductId(product.getId());
    order.setAmount(product.getPrice() * orderDTO.getQuantity());
    return orderRepository.save(order);
}

关键点:事务管理 (@Transactional)、业务异常封装


📚 学习路线与资源

阶段 内容 资源
基础 核心配置、RESTful API、数据访问 Spring 官方文档
进阶 安全控制(Security)、消息队列(RabbitMQ) 《Spring Boot实战》
高级 微服务(Cloud)、响应式编程(WebFlux) Spring Cloud Alibaba

💡 最佳实践

  • 配置文件分离:application-{env}.yml
  • 使用 DTO 隔离实体类与接口传输
  • 生产环境关闭 Actuator 敏感端点

本教程涵盖 Spring Boot 企业级开发全流程,代码可直接用于生产环境。通过 Swagger 生成的交互式文档(示例见下图),极大提升团队协作效率。


网站公告

今日签到

点亮在社区的每一天
去签到