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 的启动流程
- 加载
@SpringBootApplication
注解:包含@SpringBootConfiguration
(配置类)、@EnableAutoConfiguration
(自动配置)、@ComponentScan
(组件扫描)。 - 执行
SpringApplication.run()
:- 创建 Spring 容器(ApplicationContext)。
- 加载自动配置类。
- 启动内嵌 Web 服务器。
- 完成启动:输出启动日志,监听默认端口(如 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.properties
或application.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
- 步骤:
- 使用
@RestController
注解定义控制器。 - 通过
@GetMapping
/@PostMapping
等注解映射请求。 - 返回对象自动序列化为 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 中实现多数据源配置
- 步骤:
- 在
application.yml
中定义多个数据源配置(如primary.datasource
和secondary.datasource
)。 - 创建两个
@Configuration
类,分别配置DataSource
、EntityManager
等。 - 使用
@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 代码(大部分操作自动实现)。