Java SpringBoot 框架

Java 常用类库 Java 常用类库


SpringBoot 是 Spring 框架的一个扩展项目,旨在简化 Spring 应用的初始搭建和开发过程。

SpringBoot 通过"约定优于配置"的理念,让开发者能够快速启动和运行 Spring 应用程序。

SpringBoot 的核心特点

  1. 自动配置:根据项目中添加的 jar 依赖自动配置 Spring 应用
  2. 独立运行:内嵌 Tomcat、Jetty 或 Undertow 等服务器,无需部署 WAR 文件
  3. 简化依赖管理:通过 starter 依赖简化 Maven/Gradle 配置
  4. 生产就绪:提供指标、健康检查和外部化配置等功能
  5. 无需代码生成:不需要 XML 配置

SpringBoot 的核心组件

1. SpringBoot Starter

SpringBoot Starter 是一组方便的依赖描述符,可以一站式获取所需的所有技术。例如:

  • spring-boot-starter-web:用于构建 web 应用
  • spring-boot-starter-data-jpa:用于 JPA 数据库访问
  • spring-boot-starter-test:用于测试

2. SpringBoot AutoConfiguration

SpringBoot 会根据 classpath 中的 jar 包自动配置应用程序。例如,如果 classpath 中有 H2 数据库,SpringBoot 会自动配置内存数据库。

3. SpringBoot Actuator

提供生产级功能,帮助监控和管理应用程序:

  • 应用健康检查
  • 指标收集
  • HTTP 追踪
  • 环境信息

创建第一个 SpringBoot 应用

1. 使用 Spring Initializr 创建项目

访问 start.spring.io,选择:

  • Maven 项目
  • Java 语言
  • 最新 SpringBoot 版本
  • 添加 "Web" 依赖

2. 项目结构

典型的 SpringBoot 项目结构:

src/
  main/
    java/
      com/example/demo/
        DemoApplication.java   # 主启动类
    resources/
      application.properties  # 配置文件
  test/
    java/
      com/example/demo/
        DemoApplicationTests.java # 测试类

3. 编写简单 REST 控制器

实例

@RestController
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, SpringBoot!";
    }
}

4. 运行应用

运行 DemoApplication 类中的 main 方法,应用将在默认端口 8080 启动。

访问 http://localhost:8080/api/hello 将看到返回的 "Hello, SpringBoot!" 消息。


SpringBoot 配置

1. 配置文件

SpringBoot 支持多种配置方式:

  • application.properties
  • application.yml
  • 环境变量
  • 命令行参数

示例 application.properties

实例

server.port=9090
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

2. 多环境配置

可以为不同环境创建不同的配置文件:

  • application-dev.properties:开发环境
  • application-prod.properties:生产环境

通过 spring.profiles.active 指定激活的环境:

实例

spring.profiles.active=dev

SpringBoot 数据访问

1. 使用 Spring Data JPA

添加依赖:

实例

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

定义实体类:

实例

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

创建 Repository 接口:

实例

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}

在服务层使用:

实例

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
   
    public List<User> getUsersByName(String name) {
        return userRepository.findByName(name);
    }
}

SpringBoot 最佳实践

  1. 分层架构:遵循 Controller-Service-Repository 分层
  2. 异常处理:使用 @ControllerAdvice 全局异常处理
  3. 日志记录:使用 SLF4J 记录日志
  4. 单元测试:为业务逻辑编写充分的测试
  5. API 文档:集成 Swagger 生成 API 文档

示例:全局异常处理

实例

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

SpringBoot 进阶主题

  1. Spring Security:认证和授权
  2. Spring Cloud:微服务架构
  3. Spring Batch:批处理
  4. WebFlux:响应式编程
  5. Docker 集成:容器化部署

SpringBoot 通过简化配置和提供开箱即用的功能,大大提高了 Java 应用程序的开发效率。它是现代 Java 开发中不可或缺的框架之一。

Java 常用类库 Java 常用类库