Spring Boot 开发知识整理

目录

一、版本与生态坐标

[2. 与 Spring Cloud 的版本对应(必须配套,不能乱搭)](#2. 与 Spring Cloud 的版本对应(必须配套,不能乱搭))

[3. 三代技术栈关键差异](#3. 三代技术栈关键差异)

二、快速开始

[1. 创建项目](#1. 创建项目)

[2. 最小 pom 核心](#2. 最小 pom 核心)

[3. 启动类](#3. 启动类)

[4. 推荐分层结构](#4. 推荐分层结构)

[5. 运行方式](#5. 运行方式)

三、核心原理:自动配置(面试与开发双重重点)

[1. 自动配置要解决什么](#1. 自动配置要解决什么)

[2. 工作机制](#2. 工作机制)

[3. 常用条件注解](#3. 常用条件注解)

[4. 一个典型自动配置类长什么样(会读即可)](#4. 一个典型自动配置类长什么样(会读即可))

[5. 属性绑定](#5. 属性绑定)

[四、IoC 与常用注解速查](#四、IoC 与常用注解速查)

[五、Web 开发(spring-boot-starter-web,基于 Spring MVC)](#五、Web 开发(spring-boot-starter-web,基于 Spring MVC))

[1. 常用 Controller 注解](#1. 常用 Controller 注解)

[2. 参数校验(Bean Validation)](#2. 参数校验(Bean Validation))

[3. 统一返回格式](#3. 统一返回格式)

[4. 全局异常处理(@RestControllerAdvice)](#4. 全局异常处理(@RestControllerAdvice))

[5. 拦截器与过滤器](#5. 拦截器与过滤器)

[6. HTTP 客户端(调外部服务)](#6. HTTP 客户端(调外部服务))

六、配置管理

[1. 配置文件](#1. 配置文件)

[2. 外部化配置优先级(高 → 低,常考)](#2. 外部化配置优先级(高 → 低,常考))

[3. 随机值与占位符](#3. 随机值与占位符)

[1. 连接池:默认 HikariCP](#1. 连接池:默认 HikariCP)

[2. Spring Data JPA(starter-data-jpa)](#2. Spring Data JPA(starter-data-jpa))

[3. MyBatis / MyBatis-Plus(国内主流)](#3. MyBatis / MyBatis-Plus(国内主流))

[4. 事务管理](#4. 事务管理)

[5. 多数据源](#5. 多数据源)

八、日志

[九、生产级特性(Spring Boot 的"生产就绪"能力)](#九、生产级特性(Spring Boot 的"生产就绪"能力))

[1. Spring Boot Actuator(运维端点)](#1. Spring Boot Actuator(运维端点))

[2. Micrometer 指标体系](#2. Micrometer 指标体系)

[3. 优雅停机(Graceful Shutdown)](#3. 优雅停机(Graceful Shutdown))

[4. 其他生产要点](#4. 其他生产要点)

十、测试

十一、打包与部署

[十二、Spring Boot 4.x 新特性与迁移要点(2026 重点)](#十二、Spring Boot 4.x 新特性与迁移要点(2026 重点))

[1. Boot 4.0(2025-11-20 GA)关键变化](#1. Boot 4.0(2025-11-20 GA)关键变化)

[2. Boot 4.1(2026)增量](#2. Boot 4.1(2026)增量)

[3. 迁移步骤建议](#3. 迁移步骤建议)

[十三、高频面试 / 踩坑清单](#十三、高频面试 / 踩坑清单)

参考资料


定位:Spring Boot 是 Spring 生态的"约定优于配置 "应用框架,目标是让 Spring 应用开箱即跑 ------内嵌 Web 容器、自动配置、起步依赖、生产级运维端点。 本文基于 2026 年主流版本:Spring Boot 3.5.x(最后的 3.x 维护线)与 4.0.x/4.1.x(当前新主线)。


一、版本与生态坐标

1. 当前版本格局(2026-10)

版本线 状态 基于 Java 要求
Boot 4.1.x(最新 4.1.1,2026-08) 当前主线 GA Spring Framework 7.1、Jakarta EE 11 Java 17 起,原生支持 Java 25
Boot 4.0.x(4.0.8) 维护 Spring Framework 7.0 Java 17+
Boot 3.5.x 最后的 3.x 线(商业维护) Spring Framework 6.2 Java 17+
Boot 2.7.x 仅商业支持 Framework 5.3 Java 8+

⚠️ 新项目直接选 4.1.x + Java 17/21/25;维护老项目注意 2.x 已无开源支持。

2. 与 Spring Cloud 的版本对应(必须配套,不能乱搭)

Spring Cloud 列车 别名 适配 Boot
2025.1.x Oakwood 4.0.x / 4.1.x
2025.0.x Northfields 3.5.x(OSS 已于 2026-06-30 终止)
2024.0.x Moorgate 3.4.x
2023.0.x Leyton 3.2.x / 3.3.x

3. 三代技术栈关键差异

维度 Boot 2.x Boot 3.x Boot 4.x
包名 javax.* jakarta.* jakarta.*
JDK 8+ 17+ 17+(拥抱 25)
Framework 5.x 6.x 7.x
JSON Jackson 2 Jackson 2 Jackson 3(tools.jackson)
Web 容器 Tomcat 9 Tomcat 10 Tomcat 11(Servlet 6.1)
自动配置 spring.factories AutoConfiguration.imports autoconfigure 进一步模块化拆分

二、快速开始

1. 创建项目

  • 官方脚手架:https://start.spring.io/(选 Boot 版本、Java、依赖 starters)

  • 国内可用阿里云镜像版;IDEA 的 Spring Initializr 同理。

2. 最小 pom 核心

复制代码
 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>4.1.1</version>
 </parent>
 ​
 <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <!-- Boot 4 也可用更精确的 spring-boot-starter-webmvc -->
     </dependency>
 </dependencies>
 ​
 <build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
     </plugins>
 </build>

起步依赖(starter)= 一组被预测试过的依赖组合 ,一个 spring-boot-starter-web 自动带入 spring-web、spring-webmvc、Tomcat、Jackson 等。

3. 启动类

复制代码
 @SpringBootApplication
 public class DemoApplication {
     public static void main(String[] args) {
         SpringApplication.run(DemoApplication.class, args);
     }
 }

@SpringBootApplication 是三合一注解:

  • @SpringBootConfiguration:本质 @Configuration,标记配置类;

  • @EnableAutoConfiguration:开启自动配置(核心);

  • @ComponentScan:扫描启动类所在包及子包。

启动类放在根包(如 com.example.demo),业务类放子包,保证默认扫描覆盖。

4. 推荐分层结构

复制代码
 com.example.demo
 ├── DemoApplication.java
 ├── controller/   // 接口层:参数校验、组装返回
 ├── service/      // 业务层(接口 + impl)
 ├── mapper/ 或 repository/  // 持久层
 ├── entity(domain)/  dto/  vo/
 ├── config/       // 自定义配置类
 └── common/       // 统一返回、全局异常、工具

5. 运行方式

复制代码
 mvn spring-boot:run            # 开发运行
 mvn clean package              # 打可执行 fat jar
 java -jar target/demo-0.0.1.jar

三、核心原理:自动配置(面试与开发双重重点)

1. 自动配置要解决什么

传统 SSM 要手写大量 XML/Bean(数据源、事务管理器、MVC...)。Boot 的思路:classpath 上有什么类、用户配了什么属性,就自动装配什么 Bean,用户不配置也有合理默认值。

2. 工作机制

  1. 启动时 @EnableAutoConfiguration 导入自动配置类清单;

  2. Boot 2.7 以前清单在 META-INF/spring.factories; 2.7 起(含 3.x/4.x)在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,每行一个自动配置类全限定名;

  3. 每个自动配置类由条件注解决定是否生效;

  4. 配置值通过 @ConfigurationProperties 从配置文件绑定。

3. 常用条件注解

注解 生效条件
@ConditionalOnClass classpath 存在指定类
@ConditionalOnMissingClass 不存在指定类
@ConditionalOnBean 容器中存在指定 Bean
@ConditionalOnMissingBean 容器中不存在该 Bean(用户可覆盖默认)
@ConditionalOnProperty 配置项满足条件,如 matchIfMissing
@ConditionalOnWebApplication 是 Web 环境
@ConditionalOnNotWebApplication 非 Web 环境

4. 一个典型自动配置类长什么样(会读即可)

复制代码
 @AutoConfiguration
 @ConditionalOnClass(HelloService.class)
 @EnableConfigurationProperties(HelloProperties.class)
 public class HelloAutoConfiguration {
 ​
     @Bean
     @ConditionalOnMissingBean
     public HelloService helloService(HelloProperties props) {
         return new HelloService(props.getPrefix());
     }
 }

用户只要自己声明一个 HelloService Bean,@ConditionalOnMissingBean 就让默认配置退让------这就是"约定可被覆盖"。

5. 属性绑定

复制代码
 @Component
 @ConfigurationProperties(prefix = "app.hello")
 public class HelloProperties {
     private String prefix = "Hi";     // 默认值
     // getter/setter(或用 record 直接绑定)
 }
复制代码
 app:
   hello:
     prefix: "你好"
  • 松散绑定(Relaxed Binding) :user-name / userName / user_name / USER_NAME 都能绑定到 userName;

  • 配合 spring-boot-configuration-processor,IDEA 写 yml 有提示;

  • 可用 JSR-380 注解(@NotBlank 等)+ @Validated 校验配置。


四、IoC 与常用注解速查

注解 用途
@Component / @Service / @Repository / @Controller 通用组件 / 业务层 / 持久层(带持久异常转换)/ 控制层
@Configuration 配置类,内部 @Bean 方法默认 CGLIB 代理,方法间调用拿的是同一个单例
@Bean 把方法返回值交给容器
@Autowired 按类型注入;构造器注入可省略(单构造器),推荐构造器注入(便于测试、不可变)
@Qualifier 同类型多 Bean 时按名称指定
@Resource(JDK/Jakarta) 按名称注入
@Value 注入单个配置值(复杂配置用 @ConfigurationProperties)
@Lazy 延迟初始化
@Profile("dev") 按环境装配

五、Web 开发(spring-boot-starter-web,基于 Spring MVC)

1. 常用 Controller 注解

复制代码
 @RestController                       // = @Controller + @ResponseBody,直接返回 JSON
 @RequestMapping("/api/users")
 public class UserController {
 ​
     @GetMapping("/{id}")
     public UserVO get(@PathVariable Long id) { ... }
 ​
     @PostMapping
     public UserVO create(@Valid @RequestBody UserCreateDTO dto) { ... }
 ​
     @PutMapping("/{id}")
     public UserVO update(@PathVariable Long id, @Valid @RequestBody UserUpdateDTO dto) { ... }
 ​
     @DeleteMapping("/{id}")
     public void delete(@PathVariable Long id) { ... }
 ​
     @GetMapping
     public Page<UserVO> page(@RequestParam(defaultValue = "1") int page,
                              @RequestParam(defaultValue = "20") int size) { ... }
 }
  • 注意 Boot 3/4 校验注解包名为 jakarta.validation;@Valid 触发校验,分组校验用 @Validated(Group.class)。

2. 参数校验(Bean Validation)

复制代码
 public class UserCreateDTO {
     @NotBlank(message = "用户名不能为空")
     @Size(min = 2, max = 20)
     private String name;
 ​
     @NotNull
     @Min(0) @Max(150)
     private Integer age;
 ​
     @Email
     private String email;
 }

3. 统一返回格式

复制代码
 public record R<T>(int code, String message, T data) {
     public static <T> R<T> ok(T data) { return new R<>(0, "ok", data); }
     public static <T> R<T> fail(int code, String msg) { return new R<>(code, msg, null); }
 }

4. 全局异常处理(@RestControllerAdvice)

复制代码
 @RestControllerAdvice
 public class GlobalExceptionHandler {
 ​
     @ExceptionHandler(MethodArgumentNotValidException.class)
     public R<Void> handleValid(MethodArgumentNotValidException e) {
         String msg = e.getBindingResult().getFieldErrors().stream()
                 .map(f -> f.getField() + ":" + f.getDefaultMessage())
                 .collect(Collectors.joining(";"));
         return R.fail(400, msg);
     }
 ​
     @ExceptionHandler(BusinessException.class)
     public R<Void> handleBiz(BusinessException e) {
         return R.fail(e.getCode(), e.getMessage());
     }
 ​
     @ExceptionHandler(Exception.class)
     public R<Void> handleAll(Exception e) {
         return R.fail(500, "系统异常");
     }
 }

生产环境不要把异常堆栈/内部信息直接返回前端,记日志即可。

5. 拦截器与过滤器

复制代码
 @Component
 public class AuthInterceptor implements HandlerInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) {
         // 登录/鉴权逻辑,返回 false 中断
         return true;
     }
 }
 ​
 @Configuration
 public class WebConfig implements WebMvcConfigurer {
     private final AuthInterceptor authInterceptor;
     public WebConfig(AuthInterceptor authInterceptor) { this.authInterceptor = authInterceptor; }
 ​
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(authInterceptor)
                 .addPathPatterns("/api/**")
                 .excludePathPatterns("/api/login");
     }
 }
  • 过滤器(Filter,Servlet 层)适合编码、跨域等通用处理;拦截器(Spring MVC 层)能拿到 handler 方法信息,适合业务鉴权。

  • 跨域推荐 CorsConfiguration 或网关统一处理,不要在业务里散落。

6. HTTP 客户端(调外部服务)

客户端 状态 说明
RestClient 当前首选(同步、流畅 API) Framework 6.1 引入;Boot 4 有独立 spring-boot-starter-restclient
Http Interface 推荐 声明式接口(类似 OpenFeign 但不依赖 Cloud),底层可配 RestClient/WebClient
WebClient 响应式 spring-webflux,非阻塞
RestTemplate 已进入弃用通道(Framework 7.x) 老项目可用,新项目别再用

RestClient 示例:

复制代码
 RestClient client = RestClient.create("https://api.example.com");
 ​
 UserDTO user = client.get()
         .uri("/users/{id}", 1)
         .retrieve()
         .body(UserDTO.class);

Http Interface 示例:

复制代码
 public interface UserApiClient {
     @GetExchange("/users/{id}")
     UserDTO getUser(@PathVariable("id") Long id);
 }
 ​
 @Configuration
 public class ClientConfig {
     @Bean
     UserApiClient userApiClient(RestClient.Builder builder) {
         RestClient client = builder.baseUrl("https://api.example.com").build();
         return HttpServiceProxyFactory.builderFor(RestClientAdapter.create(client))
                 .build().createClient(UserApiClient.class);
     }
 }

Boot 中调微服务 + 负载均衡,用 Spring Cloud OpenFeign(见 Cloud 笔记);调外部三方,用 RestClient/Http Interface。


六、配置管理

1. 配置文件

  • application.properties 或 application.yml(推荐,层级清晰);

  • 多环境:application-dev.yml、application-prod.yml,通过 spring.profiles.active=dev 激活。

复制代码
 server:
   port: 8080
   servlet:
     context-path: /demo
 ​
 spring:
   application:
     name: demo-service
   datasource:
     url: jdbc:mysql://localhost:3306/demo
     username: root
     password: root
     driver-class-name: com.mysql.cj.jdbc.Driver
   jpa:
     hibernate:
       ddl-auto: update
     show-sql: false

2. 外部化配置优先级(高 → 低,常考)

  1. 命令行参数 java -jar app.jar --server.port=9090;

  2. SPRING_APPLICATION_JSON;

  3. ServletConfig/ServletContext 参数;

  4. JNDI;

  5. Java 系统属性(System.getProperties);

  6. OS 环境变量 (如 SERVER_PORT,松散绑定);

  7. jar 包外的 application-{profile}.yml;

  8. jar 包内的 application-{profile}.yml;

  9. @PropertySource;

  10. 默认值。

要点:离代码越远优先级越高;敏感信息(密码)用环境变量/配置中心/Secret,不写进仓库配置。

3. 随机值与占位符

复制代码
 app:
   code: ${random.uuid}
   port: ${SERVER_PORT:8080}        # 冒号后默认值

##七、数据访问

1. 连接池:默认 HikariCP

  • Boot 默认数据源连接池是 HikariCP(快、轻);

  • 常用调优:maximum-pool-size、minimum-idle、connection-timeout、max-lifetime;

  • 池大小不是越大越好,经验起点:核数×2 + 有效磁盘数,按实际压测调整。

2. Spring Data JPA(starter-data-jpa)

复制代码
 @Entity
 public class User {
     @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private String name;
 }
 ​
 public interface UserRepository extends JpaRepository<User, Long> {
     Optional<User> findByName(String name);   // 方法名派生查询
     @Query("select u from User u where u.age > :age")
     List<User> findAdults(@Param("age") int age);
 }

3. MyBatis / MyBatis-Plus(国内主流)

  • mybatis-spring-boot-starter(或 mybatis-plus-spring-boot3-starter,注意选 Boot3/4 对应版本);

  • @Mapper 接口 + XML/注解 SQL;

  • 分页插件、自动填充、代码生成是 MP 常用能力。

4. 事务管理

复制代码
 @Service
 public class OrderService {
 ​
     @Transactional(rollbackFor = Exception.class)
     public void createOrder(OrderDTO dto) {
         // 多表写操作
     }
 }

要点(高频踩坑):

  • 默认只回滚 RuntimeException/Error ,受检异常不回滚------建议显式 rollbackFor = Exception.class;

  • @Transactional 加在 public 方法 上,且必须经 Spring 代理调用才生效 :同类内部 this.xxx() 自调用事务不生效;

  • 传播行为默认 REQUIRED;REQUIRES_NEW 挂起当前事务开新事务;

  • 事务方法内别做远程调用/耗时 IO;注意异常被 catch 吞掉导致不回滚;

  • readOnly=true 可用于纯查询优化。

5. 多数据源

  • 简单场景:用 @ConfigurationProperties 配两个 DataSource + 分包扫描 + 各自事务管理器;

  • 复杂场景考虑动态路由数据源(如 AbstractRoutingDataSource)或 ShardingSphere(分库分表)。


八、日志

  • 默认日志门面 SLF4J + 实现 Logback;默认级别 INFO;

  • 常用级别:ERROR > WARN > INFO > DEBUG > TRACE;

  • 用 Lombok 的 @Slf4j 或手动 LoggerFactory.getLogger(...);

复制代码
 logging:
   level:
     root: INFO
     com.example.demo: DEBUG
   pattern:
     console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
   file:
     name: logs/app.log
  • 结构化日志(JSON):Boot 3.4+ 内置支持,2026 年云原生标配,便于 ELK/Loki 采集:
复制代码
 logging:
   structured:
     format:
       console: json
  • 生产建议:日志输出到标准输出由容器采集;用 MDC 打 traceId;不打印密码/身份证等敏感信息。

九、生产级特性(Spring Boot 的"生产就绪"能力)

这部分是 Boot 自身能力,不要与 Spring Cloud 的微服务能力混淆。

1. Spring Boot Actuator(运维端点)

引入:

复制代码
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

常用端点:

端点 作用
/actuator/health 健康检查(K8s liveness/readiness 探针对接)
/actuator/info 应用信息
/actuator/metrics 指标
/actuator/loggers 动态查看/修改日志级别(POST)
/actuator/env 环境配置(敏感,生产慎开)
/actuator/beans /mappings /configprops Bean、URL 映射、配置属性(排障用)
/actuator/prometheus Prometheus 指标暴露

暴露配置(生产只开必要端点):

复制代码
 management:
   endpoints:
     web:
       exposure:
         include: health,info,prometheus
   endpoint:
     health:
       show-details: when_authorized

2. Micrometer 指标体系

  • Micrometer 是"SLF4J of metrics",Boot 内置;可对接 Prometheus、Datadog 等;

  • 内置 JVM、Tomcat、数据源、HTTP 请求等指标;可自定义:

复制代码
 @Service
 public class OrderService {
     private final Counter orderCounter;
     public OrderService(MeterRegistry registry) {
         this.orderCounter = registry.counter("orders.created.total");
     }
 }

3. 优雅停机(Graceful Shutdown)

复制代码
 server:
   shutdown: graceful
 spring:
   lifecycle:
     timeout-per-shutdown-phase: 30s

收到 SIGTERM 后不再接新请求、等待存量请求处理完,配合 K8s terminationGracePeriodSeconds 使用。

4. 其他生产要点

  • 健康组(groups) :liveness/readiness 分开对接 K8s 两种探针;

  • 虚拟线程(Virtual Threads):Boot 3.2+ 支持,3.5/4.x 成熟,开启后 IO 密集型服务用轻量虚拟线程:

复制代码
 spring:
   threads:
     virtual:
       enabled: true

注意:CPU 密集、使用 synchronized pin 旧问题(新版 JDK 已修复大部分)、ThreadLocal 泛滥、连接池仍是瓶颈。


十、测试

复制代码
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
 </dependency>
测试方式 注解/工具 用途
纯单元测试 JUnit 5 + Mockito(@Mock/@InjectMocks) 测 Service,mock 掉依赖,最快
切片测试 @WebMvcTest(UserController.class) 只起 MVC 层,配 MockMvc
切片测试 @DataJpaTest 只测 JPA(默认内嵌库)
全集成测试 @SpringBootTest + @AutoConfigureMockMvc 起完整容器,慢但真实
Web 断言 MockMvc 对接口状态码/JSON 断言
Boot 4 新增 RestTestClient 统一的服务端测试客户端,可替代 TestRestTemplate
复制代码
 @WebMvcTest(UserController.class)
 class UserControllerTest {
     @Autowired MockMvc mvc;
     @MockBean UserService userService;   // Boot 3.4+ 也可用 @MockitoBean
 ​
     @Test
     void should_get_user() throws Exception {
         given(userService.getById(1L)).willReturn(new User(1L, "Tom"));
         mvc.perform(get("/api/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.data.name").value("Tom"));
     }
 }

十一、打包与部署

  1. 可执行 fat jar :mvn package,所有依赖打进 BOOT-INF,java -jar 即跑;

  2. 分层 jar(Layered Jar) :依赖层与应用层分开,变更应用代码不击穿 Docker 缓存,layertools extract 配合分层 Dockerfile;

  3. 云原生构建 :spring-boot:build-image 直接用 Cloud Native Buildpacks 生成优化过的镜像(无需 Dockerfile);

  4. GraalVM Native Image :spring-boot-starter + native profile,编译成原生可执行文件,毫秒启动、低内存,代价是构建慢、反射/动态代理需显式 hint;

  5. CRaC(CRaC 4):JVM 检查点恢复,冷启动恢复到毫秒级。

最小 Dockerfile(多阶段,分层思路):

复制代码
 FROM eclipse-temurin:21-jre
 WORKDIR /app
 COPY target/*.jar app.jar
 EXPOSE 8080
 ENTRYPOINT ["java","-jar","app.jar"]

十二、Spring Boot 4.x 新特性与迁移要点(2026 重点)

1. Boot 4.0(2025-11-20 GA)关键变化

  • Spring Framework 7.0 + Java 17 基线,原生支持 Java 25;

  • Jakarta EE 11:Servlet 6.1、JPA 3.2、Bean Validation 3.1;Tomcat 11;Undertow 因未适配 Servlet 6.1 暂不支持;

  • Jackson 3 :包名从 com.fasterxml.jackson 迁到 tools.jackson ;推荐 JsonMapper(不可变);默认日期输出为 ISO-8601、属性默认按字母序;可与 Jackson 2 共存过渡;

  • 代码库完全模块化 :单体 spring-boot-autoconfigure 拆成技术域小 jar(如 spring-boot-starter-webmvc、spring-boot-starter-webmvc-test),体积更小、自动补全更干净;

  • 新增独立客户端 starter:spring-boot-starter-restclient、spring-boot-starter-webclient;

  • 全组合 JSpecify 空安全 (@Nullable/@NonNull,支持泛型/数组/vararg),Kotlin 2.2 自动翻译为空安全类型;

  • API 版本化一等支持:header/path/query/媒体类型策略 + 弃用符合 RFC 9745;

  • 弹性能力下沉内核:@Retryable(含响应式、指数退避、抖动)、@ConcurrencyLimit(配合虚拟线程);

  • 新增 RestTestClient 、HTTP Interface Groups;流畅 JmsClient;Gradle 9 支持。

2. Boot 4.1(2026)增量

  • Spring gRPC 支持、Log4j OpenTelemetry 文件轮转与增强、MongoDB 支持 Spring Batch、RabbitMQ Streams SSL、AMQP 1.0 等。

3. 迁移步骤建议

  1. 先在 Boot 3.5 + JDK 17/21 跑通,全部替换 javax → jakarta(2.7 迁移指南可分两步走);

  2. 清理 deprecated API(spring.factories 自动配置、旧配置属性);

  3. 升 Boot 4:处理 Jackson 3 包名与默认行为、新模块坐标、JSpecify 下的空指针契约;

  4. 配套 Spring Cloud 升到 2025.1.x;用依赖分析与集成测试兜底。


十三、高频面试 / 踩坑清单

  1. 自动配置原理 :AutoConfiguration.imports + @Conditional 系列 + @ConfigurationProperties;如何排除(@SpringBootApplication(exclude=...) / spring.autoconfigure.exclude)。

  2. Bean 生命周期 :实例化 → 属性填充 → Aware 回调 → BeanPostProcessor 前置 → @PostConstruct/InitializingBean/init-method → BeanPostProcessor 后置(AOP 代理在此产生)→ 使用 → @PreDestroy/DisposableBean。

  3. 循环依赖 :三级缓存(singletonObjects / earlySingletonObjects / singletonFactories);构造器循环依赖无法解决 ,Boot 2.6+ 默认禁止循环依赖(spring.main.allow-circular-references)。

  4. 事务失效场景:自调用、非 public、异常被吞、rollbackFor 未配、类未被 Spring 管理、数据库引擎不支持、传播级别配错。

  5. 过滤器 vs 拦截器 vs AOP:Servlet 层 / MVC 层 / 方法切面,各自适用面。

  6. 配置不生效:profile 没激活、同名前缀冲突、位置不对、被高优先级外部配置覆盖。

  7. 启动慢排查:组件扫描范围、自动配置过多、初始化阻塞;可用 Actuator startup 端点看初始化耗时。

  8. 内嵌容器切换:排除 Tomcat 换 Jetty(4.0 时代 Undertow 暂不可用)。


参考资料

  1. Spring Boot 官方文档 --- Spring Boot :: Spring Boot

  2. Spring Boot 4.0.0 available now(2025-11-20)--- Spring Boot 4.0.0 available now

  3. Spring Framework 7.0 GA(2025-11-13)--- Spring Framework 7.0 General Availability

  4. The state of HTTP clients in Spring(2025-09-30)--- The state of HTTP clients in Spring

  5. InfoQ:Spring Framework 7 and Spring Boot 4(2025-11)--- https://www.infoq.com/news/2025/11/spring-7-spring-boot-4/

  6. Next level Kotlin support in Spring Boot 4 --- Next level Kotlin support in Spring Boot 4

  7. start.spring.io --- https://start.spring.io/

相关推荐
Sweet锦2 小时前
jDCS 开源项目:面向工业现场的 Modbus RTU 数据采集基础框架
java·spring boot·物联网·开源
xiaolinudao1232 小时前
将多个 Excel 表格中的数据合并到单个表中|6 种实现方案全解析
java·前端·excel
谢亮_vipxieliang2 小时前
Spring Boot 3.x 从零开始——环境搭建与第一个 REST 项目
java·spring boot·后端
念何架构之路2 小时前
go-grpc核心抽象接口
开发语言·后端·golang
Wang's Blog2 小时前
Java 项目部署之 Docker工具快速入门: Docker 架构拆解:镜像、容器、守护进程与 Registry
java·docker·架构
栗子~~2 小时前
SpringCloud Gateway 基于 Nacos 实现动态路由
java·spring cloud·gateway
FYKJ_20103 小时前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计
今年下半年3 小时前
【消息队列】Spring Boot 集成 Kafka 消息队列:确保消费完成(手动提交偏移量+幂等判断+失败重试机制)
spring boot·kafka·幂等·失败重试
计算机毕设定制辅导-无忧学长3 小时前
《校园食堂在线订餐小程序的设计与实现》
java·vue.js·spring boot·微信小程序·uniapp·校园食堂在线订餐小程序