Spring Boot 4.1.0 震撼发布!新特性,惊爆了!
下面挑 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.uptimeprocess.startTimeprocess.currentTimeprocess.timezoneprocess.localeprocess.workingDirectory
排查线上服务运行时间、时区问题,会方便一些。
8. OpenTelemetry 可观测性增强
新增 management.opentelemetry.enabled,可以关闭 OpenTelemetry SDK,同时保留传播器配置。还加了 sampler、SpanLimits、LogLimits、OTLP SSL bundle 等配置。
简单说,接入链路追踪时,细节可控性更强了。
9. Log4j 文件滚动更好配
Log4j 文件轮转支持 4 种策略:
sizetimesize-and-timecron
日志量大的服务,可以少写很多自定义配置。
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
