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 格式

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 官方发布说明
相关推荐
Penge6667 小时前
Go 接口编译期断言
后端
我是一颗柠檬7 小时前
【MySQL全面教学】MySQL面试高频考点汇总Day15(2026年)
数据库·后端·mysql·面试
橙淮8 小时前
并发编程(六)
java·jvm
拽着尾巴的鱼儿8 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影8 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
Ceelog8 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
EntyIU9 小时前
JVM内存与GC笔记
java·jvm·笔记
XS0301069 小时前
并发编程 六
java·后端
yaoxin5211239 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道9 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试