Spring Boot 4.1.0 已经发布了。我看了一圈 Release Notes,这次不是“改几个依赖版本”那么简单,很多点都是企业项目里天天会碰到的:gRPC、安全、可观测性、Redis、JDBC、OAuth2、配置文件编码,基本都照顾到了。

下面挑 10 个比较值得关注的更新点,顺手给几个代码例子。

1. 官方支持 gRPC

以前 Spring Boot 接 gRPC,总要自己配一堆东西。4.1 开始官方支持 gRPC Server 和 Client,可以写独立 Netty 服务,也可以走 Servlet + HTTP/2。

依赖:

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

服务代码:

@GrpcService
public class HelloService extends HelloWorldGrpc.HelloWorldImplBase {

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

        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}

对内部微服务通信来说,这个更新挺香。

2. HTTP 客户端增强 SSRF 防护

4.1 支持给阻塞和响应式 HTTP Client 配 InetAddressFilter,可以拦截访问内网、回环地址这类风险请求。

@Bean
InetAddressFilter inetAddressFilter() {
    return InetAddressFilter.externalAddresses();
}

做图片抓取、Webhook、URL 预览的项目,这个建议重点看。

3. 配置文件导入支持编码

以前 properties 默认 ISO-8859-1,中文配置很容易翻车。现在可以这样写:

spring.config.import=classpath:biz.properties[encoding=utf-8]

小改动,但救命。

4. JDBC 支持懒获取连接

新增:

spring:
  datasource:
    connection-fetch: lazy

开启后,只有真正执行 SQL 时才从连接池拿物理连接。对启动慢、Bean 多、数据库压力敏感的服务挺有帮助。

5. RedisListener 自动配置

Spring Data Redis 的 @RedisListener 现在有自动配置了。没有自定义 RedisMessageListenerContainer 时,Boot 会帮你注册默认容器。

@Component
public class OrderRedisListener {

    @RedisListener(topics = "order:paid")
    public void onPaid(String message) {
        System.out.println("收到订单支付消息:" + message);
    }
}

以前这类监听还得手动配容器,现在省心不少。

6. OAuth2 Resource Server 更灵活

JWT 权限提取支持 SpEL 表达式了:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          authorities-claim-expressions:
            - "claims['roles']"
            - "claims['permissions']"
          authority-prefix: "ROLE_"

权限字段不规范的老系统,这下舒服多了。

7. Actuator info 信息更丰富

/actuator/info 新增进程相关信息,比如:

  • process.uptime
  • process.startTime
  • process.currentTime
  • process.timezone
  • process.locale
  • process.workingDirectory

排查线上服务运行时间、时区问题,会方便一些。

8. OpenTelemetry 可观测性增强

新增 management.opentelemetry.enabled,可以关闭 OpenTelemetry SDK,同时保留传播器配置。还加了 sampler、SpanLimits、LogLimits、OTLP SSL bundle 等配置。

简单说,接入链路追踪时,细节可控性更强了。

9. Log4j 文件滚动更好配

Log4j 文件轮转支持 4 种策略:

  • size
  • time
  • size-and-time
  • cron

日志量大的服务,可以少写很多自定义配置。

10. Docker Compose 失败日志更友好

Spring Boot 调 docker compose up/start 失败时,现在会自动打印 docker compose logs。本地开发连中间件时,失败原因更容易看出来,不用再手动敲一遍命令。

升级时注意

这次也有破坏性变化。Boot 4.0 里废弃的类、方法、属性,在 4.1 里已经移除;旧的 layertools jar mode 也没了;Derby 支持被废弃;jOOQ 相关版本对 Java 版本也有更高要求。

我的建议是:新项目可以直接看 4.1,老项目别一把梭。先跑依赖检查、废弃 API 检查,再上测试环境压一轮。

整体看,Spring Boot 4.1.0 不算花哨,但很实用。它更像是在告诉大家:Boot 不只是“快速启动项目”,而是在继续把微服务、安全、可观测性、数据访问这些工程细节往框架里收。

参考:Spring Boot 4.1 Release Notes、Spring Boot Reference

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论