找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4091

积分

0

好友

538

主题
发表于 2 小时前 | 查看: 6| 回复: 0

前言

就在前几天,2026年6月10日,Spring Boot官方正式发布了 4.1.0 版本。

消息一出,整个Java技术圈都沸腾了。

说实话,Spring Boot 4.0在2025年11月发布的时候,已经是一次“代际大升级”——Jakarta EE 11基线、Jackson 3、JSpecify空值安全、Gradle 9支持。

那一次升级,很多团队到现在还没完全消化完。

而这一次4.1.0,虽然官方说是“增量升级”,但带来的新特性,个个都是生产环境的硬核刚需。

有些小伙伴在工作中可能已经听说了——gRPC官方支持、SSRF漏洞防护、Kotlin 2.3、懒加载数据源连接……每一个单拿出来,都值得写一篇文章专门讲。

今天,我就把这些新特性从头到尾给你拆解一遍,让你看完就能直接上手用。

希望对你会有所帮助。

一、先回顾一下

在聊4.1的新特性之前,我们先花2分钟回顾一下,Spring Boot 4.0到底带来了什么。

Spring Boot 4.0(2025年11月发布)是一次“代际大升级”:

  • Jakarta EE 11基线 —— 从 javax.* 彻底切换到 jakarta.*
  • Jackson 3 —— JSON处理库大版本升级
  • JSpecify空值安全 —— 更严格的Null-Safety注解体系
  • API版本化 —— 更好的兼容性管理
  • Gradle 9支持 —— 构建工具链升级

而Spring Boot 4.1是建立在Spring Framework 7.0.x之上的增量增强版。

它的定位非常清晰:不搞“推倒重来”,而是把4.0没来得及做、生产环境最需要的能力,一次性补齐。

下面这张图,帮你理清整个Spring Boot 4.x家族的演进脉络:

Spring Boot 4.x 版本演进路线图

接下来,我们逐一拆解4.1.0最值得关注的8大核心新特性。

二、重磅一:gRPC官方支持

有些小伙伴可能会问:gRPC不是早就有了吗?为什么说Spring Boot 4.1才“正式支持”?

以前在Spring Boot里用gRPC,得自己手动配置Netty服务器、注册服务、处理拦截器,或者依赖第三方的Starter。

踩坑无数,配置繁琐,维护困难。

Spring Boot 4.1来了之后,这一切都变了。

gRPC正式成为Spring Boot的一等公民。

3.1 新增的模块

Spring Boot 4.1引入了三个全新的模块化Starter:

  • spring-boot-starter-grpc-server —— gRPC服务端自动配置
  • spring-boot-starter-grpc-client —— gRPC客户端自动配置
  • spring-boot-starter-batch-mongodb —— Spring Batch + MongoDB支持

3.2 服务端配置示例

引入依赖:

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

编写你的gRPC服务实现:

@GrpcService // 标记这是一个gRPC服务
public class GreetingServiceImpl extends GreetingServiceGrpc.GreetingServiceImplBase {

    @Override
    public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
        String message = "Hello, " + request.getName() + "!";
        HelloReply reply = HelloReply.newBuilder().setMessage(message).build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}

就这么简单。 @GrpcService 注解一加,Spring Boot自动帮你完成服务注册、Netty启动、拦截器装配。

配置文件:

spring:
  grpc:
    server:
      port: 9090 # gRPC服务端口,默认9090
      transport: netty # 支持netty或servlet

3.3 客户端配置示例

@GrpcClient("my-grpc-service")  // 注入一个gRPC客户端
private GreetingServiceGrpc.GreetingServiceBlockingStub greetingClient;

public String callGreeting(String name) {
    HelloRequest request = HelloRequest.newBuilder().setName(name).build();
    HelloReply reply = greetingClient.sayHello(request);
    return reply.getMessage();
}

3.4 异常处理:@GrpcAdvice

Spring Boot 4.1还带来了 @GrpcAdvice,用于集中处理gRPC异常:

@GrpcAdvice
public class GlobalGrpcExceptionHandler {

    @GrpcExceptionHandler(IllegalArgumentException.class)
    public StatusRuntimeException handleIllegalArgument(IllegalArgumentException e) {
        return Status.INVALID_ARGUMENT.withDescription(e.getMessage()).asRuntimeException();
    }
}

3.5 自动装配Observation拦截器

服务端会自动装配 ObservationGrpcServerInterceptor,支持自定义观测约定,自动收集gRPC调用的Metrics和Tracing数据。

spring:
  grpc:
    server:
      observation:
        enabled: true # 默认开启

3.6 支持的传输方式

Spring gRPC支持两种传输方式:

  • Standalone Netty —— 适合纯gRPC场景,高性能
  • Servlet HTTP/2 —— 适合与现有Servlet容器集成

3.7 gRPC服务调用链路图

gRPC通信架构流程

三、重磅二:HTTP Client SSRF防护

有些小伙伴可能听说过SSRF(Server-Side Request Forgery,服务端请求伪造)——攻击者利用服务端发起HTTP请求的功能,去访问内网资源、读取敏感文件。这是一个非常危险的安全漏洞。

Spring Boot 4.1这次直接在框架层加入了SSRF防护机制。

4.1 底层原理

SSRF防护的核心是 InetAddressFilter。它的工作原理是:

  1. 当HttpClient要发起请求时,先解析目标域名对应的IP地址
  2. InetAddressFilter检查这个IP是否在允许列表中
  3. 如果IP在黑名单(如内网IP段、本地回环地址等),直接拒绝请求
  4. 避免请求被重定向到恶意地址

4.2 配置方式

spring:
  http:
    client:
      ssrf:
        enabled: true # 开启SSRF防护
        deny-ip-subnets: # 禁止访问的IP段
          - 10.0.0.0/8
          - 172.16.0.0/12
          - 192.168.0.0/16
          - 127.0.0.0/8
        allow-ip-subnets: # 允许访问的IP段(白名单优先)
          - 192.168.1.0/24

配置逻辑很清晰:先匹配白名单,再匹配黑名单,默认拦截所有内网IP。

4.3 代码示例

@RestController
public class ProxyController {

    @Autowired
    private RestClient restClient;  // 自动应用SSRF防护

    @GetMapping("/fetch")
    public String fetchUrl(@RequestParam String url) {
        // 如果url指向内网地址,自动被拦截
        return restClient.get()
                .uri(url)
                .retrieve()
                .body(String.class);
    }
}

四、重磅三:OpenTelemetry和可观测性全面增强

Spring Boot 4.1在可观测性方面做了大量增强。

5.1 OTLP SDK导出器环境变量支持

Spring Boot 4.1现在支持通过标准环境变量配置OpenTelemetry协议(OTLP)导出器:

# application.yml 方式
spring:
  telemetry:
    otlp:
      exporter:
        endpoint: http://otel-collector:4318
        timeout: 10s

# 或通过环境变量(官方推荐,更接近标准)
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
export OTEL_EXPORTER_OTLP_TIMEOUT=10000

这意味着配置方式更标准化,与OpenTelemetry社区的最佳实践保持一致。

5.2 Actuator端点增强:ProcessInfo

/actuator/info 端点现在提供了更丰富的进程信息:

  • 进程运行时间(uptime)
  • 启动时间(start time)
  • 当前时间
  • 时区、语言环境
  • 工作目录
{
  "process": {
    "uptime": 3600000,
    "startTime": "2026-06-10T10:00:00Z",
    "currentTime": "2026-06-10T11:00:00Z",
    "timezone": "Asia/Shanghai",
    "locale": "zh_CN",
    "workingDir": "/app"
  }
}

5.3 RabbitMQ和Kafka观测约定自动配置

Spring Boot 4.1现在自动配置Spring AMQP和Spring Kafka的观测约定Bean,开箱即用:

spring:
  rabbitmq:
    observation:
      enabled: true
  kafka:
    observation:
      enabled: true

五、重磅四:数据访问层多项增强

6.1 懒加载数据源连接(Lazy DataSource Connection)

这是4.1中一个非常实用的优化。通过支持 LazyConnectionDataSourceProxy,数据源连接不再在应用启动时全部初始化,而是延迟到第一次实际使用时才建立。

spring:
  datasource:
    lazy: true # 开启懒加载数据源连接

效果:应用启动速度明显加快,尤其是在微服务架构中,每个服务启动时不需要等数据库连接池全部初始化完。

6.2 @Async方法的异步上下文传播

Spring Boot 4.1改进了 @Async 方法的异步上下文传播能力,确保异步任务执行时能正确传递安全上下文、事务上下文等。

6.3 Jackson配置属性增强

Spring Boot 4.1更新了Jackson的配置属性和自定义支持,提供了更细粒度的JSON序列化配置控制。

6.4 Derby进入废弃状态

Apache Derby项目已经宣布退休。Spring Boot 4.1中将Derby集成标记为deprecated:

  • DatabaseDriver.DERBY
  • EmbeddedDatabaseConnection.DERBY

如果你只是在测试里用嵌入式数据库,建议迁移到H2或HSQL。

六、重磅五:构建工具链持续优化

7.1 Maven Layers增强

Spring Boot 4.1对Maven的layers配置做了优化,让Docker镜像分层更精细,充分利用Docker的层缓存机制。

7.2 Gradle build-info增强

Gradle构建信息更加完善, bootBuildImage 支持通过命令行配置环境变量。

7.3 导入配置文件支持字符编码

spring.config.import 属性上可以指定字符编码值:

spring:
  config:
    import: "file:./config/application-utf8.yml?charset=UTF-8"

七、重磅六:Log4j文件轮转支持

Spring Boot 4.1为Log4j增加了文件轮转(File Rotation)支持:

logging:
  log4j2:
    file:
      rotation:
        strategy: size # 按大小轮转
        max-size: 100MB
        max-history: 30
        compression: gz # 自动压缩历史日志

不用再手写log4j2.xml了,直接在application.yml里配置就行。

八、重磅七:Kotlin 2.3支持

Spring Boot 4.1升级了对Kotlin 2.3的支持,Kotlin开发者可以直接享用最新Kotlin语言特性。

九、重磅八:依赖生态全面升级

Spring Boot 4.1包含了所有来自Spring Boot 4.0.7的Bug修复、文档改进和安全修复。同时,整个依赖生态也进入新一轮版本:

  • Spring Security 7.1.0
  • Spring Data 2025.1.6
  • Project Reactor 2025.0.6
  • Jackson 3.1.4
  • Testcontainers 2.0.5
  • Spring gRPC 1.1.0

十、升级前必看:破坏性变化清单

有些小伙伴可能已经迫不及待想升级了,但升级前请务必看完这一节。

10.1 4.0废弃API开始移除

Spring Boot 4.0中标记为 @Deprecated 的类、方法和属性,在4.1中开始被移除。

升级前务必执行:

mvn -DskipTests compile
# 或
./gradlew compileJava

然后重点检查编译器输出的deprecated警告,确保所有废弃API都已经被替换。

10.2 jOOQ需要Java 21+

Spring Boot 4.1将jOOQ升级到3.20,而jOOQ 3.20要求Java 21或更高版本。

如果你使用了jOOQ,必须确认CI环境和运行时JDK都是Java 21+。

10.3 Derby废弃

如前面提到的,Derby集成已进入deprecated状态,建议迁移到H2或HSQL。

10.4 RabbitMQ / AMQP变化

Spring Boot 4.1中,RabbitMQ和AMQP相关能力有调整,建议谨慎评估,避免按过期资料盲目迁移。部分在M3中引入的Rabbit和AMQP变更将推迟到Spring Boot 4.2中交付。

十一、优缺点与适用场景

🌟 Spring Boot 4.1.0的优点

  • gRPC官方支持:告别第三方Starter,官方统一配置、统一观测、统一异常处理
  • 安全增强:SSRF防护在框架层解决,不用自己写Filter
  • 可观测性升级:OTLP标准环境变量支持,与OpenTelemetry社区最佳实践对齐
  • 启动性能优化:懒加载数据源连接,微服务启动速度更快
  • 运维体验提升:Log4j文件轮转YAML配置,不用手写XML
  • 生态同步:Spring Security 7.1、Kotlin 2.3等全家族同步升级

⚠️ Spring Boot 4.1.0的注意事项

  • 破坏性变更:4.0废弃API开始移除,升级前必须清理
  • jOOQ用户需要Java 21+:如果使用jOOQ,必须升级JDK
  • Derby废弃:嵌入式测试数据库需要迁移到H2/HSQL
  • 发布延迟:本应从5月发布,推迟到6月,说明版本变更需要谨慎评估

🎯 适用场景

场景 推荐程度 理由
新项目从4.0开始 强烈推荐 直接享受所有新特性,零迁移成本
已有4.0.x项目 推荐 增量升级,收益高,风险可控
使用gRPC的项目 强烈推荐 官方支持,告别第三方Starter
安全敏感型项目 强烈推荐 SSRF防护开箱即用
使用jOOQ的项目 需评估 确认JDK已升级到21+
3.x及更早版本 需规划 需要先升级到4.0,再升级到4.1

总结

Spring Boot 4.1.0,是4.x时代从“代际大升级”走向“生产级完善”的关键一步。

它带来了什么?

  • gRPC官方支持 —— 微服务通信多了一个官方选择
  • SSRF防护 —— 安全这件事,框架帮你兜底
  • 可观测性增强 —— OTLP标准化,跟得上云原生节奏
  • 启动性能优化 —— 懒加载数据源,微服务启动更快
  • Log4j文件轮转 —— 运维配置更简单

升级前要做什么?

  • 清理4.0废弃API的调用
  • 如果使用jOOQ,确认JDK是21+
  • 如果使用Derby,迁移到H2/HSQL
  • 谨慎评估RabbitMQ/AMQP相关变更

一句话总结:Spring Boot 4.1.0不是一次“推倒重来”的大版本,而是对4.0时代生产级能力的一次全面补齐。

gRPC官方支持、SSRF防护、OTLP标准化——每一个新特性,都直击生产环境的真实痛点。

如果你已经在用4.0,建议尽快规划升级;如果你还在3.x,是时候考虑向4.x迈进了。





上一篇:法国肥猫Le Chaton Fat“超越”Claude Fable 5?AI圈集体整活全记录
下一篇:AI创业是不是伪命题:先有生意还是先有工具
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-6-17 03:30 , Processed in 0.679067 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表