Skip to content

Spring Boot

什么是 Spring Boot

Spring Boot 是基于 Spring 框架的一个开源项目,主要用于简化 Spring 应用的配置和开发。它通过自动配置、起步依赖(Starter)和内嵌服务器等机制,使得开发者能快速构建独立、生产级别的应用程序,而无需繁琐的 XML 配置。

Spring Boot 的优势

  • 快速开发: 通过自动配置和 Starter 依赖,减少开发初期的配置工作。
  • 简化配置: 内置大量默认配置,开发者可以按需进行定制。
  • 内嵌服务器: 支持内置 Tomcat、Jetty 或 Undertow,方便测试和部署。
  • 易于部署: 可打包为独立的 jar 包,直接运行。
  • 丰富的监控功能: Actuator 提供健康检查、指标监控等功能,便于生产环境管理。

如何创建一个 Spring Boot 应用程序

  • 使用 Spring Initializr: 访问 start.spring.io 选择所需依赖、项目类型和配置,生成项目代码。
  • 导入 IDE: 将生成的项目导入到常用的 IDE(如 IntelliJ IDEA 或 Eclipse)。
  • 编写代码: 编写业务逻辑代码,并在主类上添加 @SpringBootApplication 注解。
  • 运行项目: 直接运行主类的 main() 方法即可启动内嵌服务器并加载应用。

Spring Boot 自动配置(Auto-Configuration)

自动配置是 Spring Boot 的核心特性之一,它会根据项目中引入的依赖(例如 spring-boot-starter-web、spring-boot-starter-data-jpa 等),自动为应用配置相应的 Bean 和组件。这样开发者无需手动配置大量细节,可以专注于业务逻辑。

  • 原理:根据类路径中的依赖自动配置 Bean。
    • 通过 @Conditional 注解(如 @ConditionalOnClass)按条件加载配置。
  • 示例:引入 spring-boot-starter-data-jpa 后,自动配置数据源和 JPA 相关 Bean。
  • 查看自动配置:启动时添加 --debug 参数可查看生效的配置。

什么是 Spring Boot Starter

Spring Boot Starter 是一组预先定义好的依赖包集合,目的是帮助开发者快速引入特定功能所需的所有依赖。例如:

  • spring-boot-starter-web: 用于开发 Web 应用,包含了 Spring MVC、Jackson 等。
  • spring-boot-starter-data-jpa: 用于简化数据库操作,集成了 Spring Data JPA 和 Hibernate。

Spring Boot 的启动流程

  1. 加载 @SpringBootApplication 注解:包含 @SpringBootConfiguration(配置类)、@EnableAutoConfiguration(自动配置)、@ComponentScan(组件扫描)。
  2. 执行 SpringApplication.run()
    • 创建 Spring 容器(ApplicationContext)。
    • 加载自动配置类。
    • 启动内嵌 Web 服务器。
  3. 完成启动:输出启动日志,监听默认端口(如 8080)。

application.properties 与 application.yml 的作用是什么

这两个配置文件用于存储应用的各种配置属性,如服务器端口、数据库连接信息、日志配置等。Spring Boot 会在启动时自动加载这些文件,并将其中的配置应用到应用上下文中,方便集中管理配置。

Spring Boot 常用注解

  • 核心注解
    • @SpringBootApplication:启动类注解。
    • @RestController:声明 RESTful 控制器。
    • @GetMapping/@PostMapping:定义 HTTP 方法映射。
  • 依赖注入
    • @Autowired:自动注入 Bean。
    • @Component:通用组件注解。
    • @Service/@Repository:业务层/持久层组件。
  • 配置相关
    • @Value:注入配置文件属性。
    • @ConfigurationProperties:批量绑定配置到对象。

如何自定义 Spring Boot 配置文件

  • 配置文件:默认使用 application.propertiesapplication.yml
  • 多环境配置
    • 命名规则:application-{profile}.properties(如 application-dev.properties)。
    • 激活方式:通过 spring.profiles.active=dev 指定环境。
  • 自定义配置读取
    java
    @Value("${custom.property}")  // 单个属性
    private String property;
    
    @ConfigurationProperties(prefix = "my.config")  // 绑定到对象
    public class MyConfig { ... }

如何在 Spring Boot 中使用日志记录

  • 默认日志框架: Spring Boot 默认使用 Logback 作为日志框架。
  • 配置日志: 可以在 application.properties 或 application.yml 中配置日志级别、日志输出格式和文件路径。
  • 自定义配置: 若有特殊需求,可提供自定义的 logback-spring.xml 配置文件,实现更灵活的日志管理。

Spring Boot 如何实现 RESTful API

  • 步骤
    1. 使用 @RestController 注解定义控制器。
    2. 通过 @GetMapping/@PostMapping 等注解映射请求。
    3. 返回对象自动序列化为 JSON(默认使用 Jackson 库)。
  • 示例
    java
    @RestController
    public class UserController {
        @GetMapping("/users/{id}")
        public User getUser(@PathVariable Long id) {
            return userService.findById(id);
        }
    }

Spring Boot 中如何管理事务

  • 声明式事务:使用 @Transactional 注解。
    • 作用位置:类或方法上(推荐方法级别)。
    • 关键属性
      • propagation:事务传播行为(默认 REQUIRED)。
      • isolation:隔离级别(默认 DEFAULT)。
  • 示例
    java
    @Service
    public class UserService {
        @Transactional
        public void updateUser(User user) {
            // 数据库操作
        }
    }

Spring Boot Actuator 的作用

Spring Boot Actuator 提供了监控和管理生产环境应用的功能。它通过一系列的 REST 端点(如 /actuator/health、/actuator/info 等),帮助开发者了解应用的健康状态、性能指标、日志信息等。只需引入相应依赖并简单配置,即可使用这些管理功能。

  • 功能:提供应用监控和管理端点(Endpoint)。
  • 常用端点
    • /actuator/health:应用健康状态。
    • /actuator/info:应用基本信息。
    • /actuator/metrics:性能指标(如内存、请求数)。
  • 安全配置:生产环境需限制访问(如通过 Spring Security)。

如何在 Spring Boot 中实现多数据源配置

  • 步骤
    1. application.yml 中定义多个数据源配置(如 primary.datasourcesecondary.datasource)。
    2. 创建两个 @Configuration 类,分别配置 DataSourceEntityManager 等。
    3. 使用 @Primary 注解标记主数据源。
  • 注意:需手动指定不同数据源的包扫描路径,避免冲突。

Spring Boot 如何实现单元测试

  • 常用工具
    • @SpringBootTest:启动完整 Spring 容器(集成测试)。
    • @WebMvcTest:仅测试 Web 层(Mock MVC)。
    • @DataJpaTest:仅测试 JPA 层(内存数据库)。
  • 示例
    java
    @SpringBootTest
    class UserServiceTest {
        @Autowired
        private UserService userService;
    
        @Test
        void testFindUser() {
            User user = userService.findById(1L);
            assertNotNull(user);
        }
    }

如何在 Spring Boot 中处理异常

可以使用 @ControllerAdvice 配合 @ExceptionHandler 实现全局异常处理。具体步骤:

  • 定义一个带有 @ControllerAdvice 注解的类。
  • 在该类中编写方法,使用 @ExceptionHandler(异常类型.class) 注解来指定需要处理的异常。
  • 在方法中返回自定义的错误信息或视图,实现统一的异常处理逻辑。

如何在 Spring Boot 中连接数据库

  • 添加依赖: 引入 spring-boot-starter-data-jpa(或其他 ORM 框架依赖)和数据库驱动包。
  • 配置数据库: 在 application.properties 或 application.yml 中配置数据库 URL、用户名、密码及其他参数。
  • 定义实体与 Repository: 使用 JPA 注解定义实体类,并创建继承 JpaRepository 的接口,用于数据库操作。
  • 自动管理: Spring Boot 会自动配置数据源和事务管理器,通过 Repository 直接操作数据库,无需手动编写 SQL 代码(大部分操作自动实现)。

Released under the AGPL-3.0 License