Spring Boot 3.5 新特性
Spring Boot 3.5 将是 Spring Boot 3.x 系列的最后一个版本,在正式迈入 Spring Boot 4.0 之前,它为开发者体验、可观测性、安全性以及云原生能力带来了多项增强特性。整体来看,这是一次 平滑过渡:在保持现有应用兼容性的基础上,为 4.0 打下更坚实的技术基石。这里总结6个重要的特性。
1. 从环境变量中加载多组配置属性
以往的 Spring Boot 只支持通过环境变量加载单个属性,在 3.5 中,这一限制不复存在。现在可以在 一个环境变量中定义多组配置,并一次性加载。这对云原生部署场景尤为重要:在 Kubernetes、Docker Compose 或容器化应用中,常常需要通过环境变量传递复杂的应用配置。
使用方式
Spring Boot 3.5 提供了 env:
前缀,通过 spring.config.import
属性即可导入环境变量中的配置。
示例 1:Properties 格式
export DB_CONFIG="database.host=localhost
database.port=5432
database.name=mydb"
然后在 application.properties
中引入:
spring.config.import=env:DB_CONFIG
然后,你就可以在应用中直接使用:
@Component
public class MyService {@Value("${database.host}")private String dbHost;@Value("${database.port}")private int dbPort;// 可直接使用 dbHost 和 dbPort
}
示例 2:YAML 格式
export MY_YAML_CONFIG="
database:host: localhostport: 5432name: mydb
"
同样在 application.properties
中引入:
spring.config.import=env:MY_YAML_CONFIG
场景举例
在 EDAS 或 Kubernetes 部署中,我们经常通过 ConfigMap 或 Secret 传递数据库、MQ 等多项配置。Spring Boot 3.5 可以让我们直接通过一个DB_CONFIG
完整注入,避免创建过多的环境变量。
2. Service Connection 新增 SSL/TLS 支持
在 Spring Boot 3.1 中,引入了 Service Connection 功能,用于简化第三方服务(如 Redis、Kafka、MongoDB 等)的本地集成测试与开发配置。Spring Boot 3.5 在此基础上新增了 客户端 SSL/TLS 支持,可以更安全地与外部服务通信。
支持的服务类型
- Cassandra
- Couchbase
- Elasticsearch
- Kafka
- MongoDB
- RabbitMQ
- Redis
在 Testcontainers 中启用 SSL
Spring Boot 3.5 新增了多种注解来配置 SSL 证书与密钥,包括:
@Ssl
@JksKeyStore
@JksTrustStore
@PemKeyStore
@PemTrustStore
/* Redis 集成测试 */
@Testcontainers
@SpringBootTest
class MyRedisWithSslIntegrationTests {@Container@ServiceConnection@PemKeyStore(certificate = "classpath:client.crt", privateKey = "classpath:client.key")@PemTrustStore("classpath:ca.crt")static RedisContainer redis = new SecureRedisContainer("redis:latest");@Autowiredprivate RedisOperations<Object, Object> operations;@Testvoid testRedis() {// 测试 Redis 连接的 SSL/TLS 加密}
}
# 在 Docker Compose 中启用 SSL
services:redis:image: 'redis:latest'ports:- '6379'secrets:- ssl-ca- ssl-key- ssl-certcommand: >redis-server --tls-port 6379 --port 0--tls-cert-file /run/secrets/ssl-cert--tls-key-file /run/secrets/ssl-key--tls-ca-cert-file /run/secrets/ssl-calabels:- 'org.springframework.boot.sslbundle.pem.keystore.certificate=client.crt'- 'org.springframework.boot.sslbundle.pem.keystore.private-key=client.key'- 'org.springframework.boot.sslbundle.pem.truststore.certificate=ca.crt'
secrets:ssl-ca:file: 'ca.crt'ssl-key:file: 'server.key'ssl-cert:file: 'server.crt'
3. 新增注解式 Filter 与 Servlet 注册方式
在过去,我们一般通过 @ServletComponentScan
配合 @WebFilter
、@WebServlet
来注册 Servlet 组件:
@SpringBootApplication
@ServletComponentScan
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
然后定义一个过滤器:
@WebFilter(urlPatterns = "/*")
public class LoggingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 请求前处理chain.doFilter(request, response);// 响应后处理}
}
Spring Boot 3.5通过更灵活的基于注解的方法增强了这一点,并引入了@ServletRegistration
注册来注册Servlet, @FilterRegistration
注册Filter:
@Configuration
public class FilterConfig {@Bean@FilterRegistration(name = "loggingFilter",urlPatterns = "/*",order = 0)public LoggingFilter loggingFilter() {return new LoggingFilter();}
}
4. Cloud Native Buildpacks 增强
Spring Boot 3.5 在 云原生构建 方面带来了三大升级:
① 默认构建器变更
- 新默认构建器:
paketobuildpacks/builder-noble-java-tiny
- 构建出的镜像更加 精简、安全、轻量
- 镜像不再内置 Shell 和调试工具,更适合生产部署
- 如果确实需要 Shell,可使用
paketobuildpacks/ubuntu-noble-run-base
② 镜像认证增强
- Maven/Gradle 插件支持从
~/.docker/config.json
中读取认证配置 - 支持 macOS Keychain 等凭证助手
③ 构建日志可观测性提升
- 更详细的日志输出
- 更容易排查构建异常
- 改进对 CI/CD 流水线的集成
5. Actuator 支持动态触发 Quartz 任务
Spring Boot 3.5 新增了一个非常实用的功能:通过 Actuator HTTP API 可以在运行时手动触发 Quartz 定时任务。
使用方式
可以通过向以下端点发出POST请求来触发特定的Quartz作业:
// {groupName} → Quartz Job 所属分组
// {jobName} → Quartz Job 名称
/actuator/quartz/jobs/{groupName}/{jobName}
成功的请求返回一个JSON响应,其中包含有关触发作业的详细信息
{"group": "reporting","name": "dailyStatsJob","className": "org.springframework.scheduling.quartz.DelegatingJob","triggerTime": "2025-05-22T20:03:31.949172098Z"
}
6. 支持自定义结构化日志中的堆栈信息
Spring Boot 3.4 引入了 结构化日志(Structured Logging),而在 3.5 中,这一功能进一步增强:你可以完全控制 堆栈追踪(Stack Trace) 在结构化日志中的展示方式。这种结构化日志的定制使我们能够对日志输出进行精细控制,从而更容易根据我们的操作和分析需求优化日志。
新配置项
通过 logging.structured.json.stacktrace.*
系列属性实现:
logging:structured:json:stacktrace:root: first # 打印顶部带有根本原因的堆栈跟踪(root: first)max-length: 1024 # 将堆栈跟踪字符串限制为1024个字符include-common-frames: true # 在输出中包含公共帧include-hashes: true # 为每个堆栈跟踪添加一个哈希值,方便去重
可配置能力
- 更改堆栈帧的顺序(例如,root first或last)
- 限制堆栈跟踪字符串的最大长度
- 限制每个堆栈跟踪包含的帧数
- 决定是否包含或排除公共框架
- 添加堆栈跟踪的哈希,以便于消重或关联
总结
Spring Boot 3.5 是一个完善的升级,它在不破坏现有应用的前提下,强化了:
- 配置加载能力
- 云原生集成体验
- 安全性(SSL/TLS)
- 可观测性(结构化日志 + 构建日志)
- 动态运维能力(Actuator + Quartz)
更多详细内容可参考 Spring Boot 3.5 官方发布说明。