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 格式
bash
export DB_CONFIG="database.host=localhost
database.port=5432
database.name=mydb"
然后在 application.properties
中引入:
properties
spring.config.import=env:DB_CONFIG
然后,你就可以在应用中直接使用:
java
@Component
public class MyService {
@Value("${database.host}")
private String dbHost;
@Value("${database.port}")
private int dbPort;
// 可直接使用 dbHost 和 dbPort
}
示例 2:YAML 格式
bash
export MY_YAML_CONFIG="
database:
host: localhost
port: 5432
name: mydb
"
同样在 application.properties
中引入:
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
java
/* 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");
@Autowired
private RedisOperations<Object, Object> operations;
@Test
void testRedis() {
// 测试 Redis 连接的 SSL/TLS 加密
}
}
yaml
# 在 Docker Compose 中启用 SSL
services:
redis:
image: 'redis:latest'
ports:
- '6379'
secrets:
- ssl-ca
- ssl-key
- ssl-cert
command: >
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-ca
labels:
- '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 组件:
java
@SpringBootApplication
@ServletComponentScan
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
然后定义一个过滤器:
java
@WebFilter(urlPatterns = "/*")
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 请求前处理
chain.doFilter(request, response);
// 响应后处理
}
}
Spring Boot 3.5通过更灵活的基于注解的方法增强了这一点,并引入了@ServletRegistration
注册来注册Servlet, @FilterRegistration
注册Filter:
java
@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作业:
java
// {groupName} → Quartz Job 所属分组
// {jobName} → Quartz Job 名称
/actuator/quartz/jobs/{groupName}/{jobName}
成功的请求返回一个JSON响应,其中包含有关触发作业的详细信息
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.*
系列属性实现:
yaml
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 官方发布说明。