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 官方发布说明
相关推荐
Trust yourself2433 分钟前
IDEA控制台乱码(Tomcat)解决方法
java·tomcat·intellij-idea
追逐时光者24 分钟前
一个 .NET 开源、功能强大的在线文档编辑器,类似于 Microsoft Word,支持信创!
后端·.net
##学无止境##26 分钟前
解锁Java分布式魔法:CAP与BASE的奇幻冒险
java·开发语言·分布式
3Cloudream32 分钟前
互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
java·spring boot·redis·elasticsearch·微服务·kafka·电商架构
想买CT5的小曹33 分钟前
SpringBoot如何获取系统Controller名称和方法名称
java·spring boot·后端
叫我阿柒啊33 分钟前
Java全栈开发工程师的面试实战:从基础到微服务
java·数据库·spring boot·微服务·node.js·vue3·全栈开发
九仞山38 分钟前
LangChain4j入门一:LangChain4j简介及核心概念
java·ai·langchain·agents
岁忧43 分钟前
(LeetCode 每日一题) 498. 对角线遍历 (矩阵、模拟)
java·c++·算法·leetcode·矩阵·go
做一位快乐的码农44 分钟前
基于Spring Boot的旅行足迹分享社区的设计与实现/基于java的在线论坛系统
java·开发语言·spring boot