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 官方发布说明
相关推荐
d***817211 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
无限大611 小时前
RBAC模型:像电影院选座一样管理权限,告别"一个用户配一个权限"的噩梦
后端
间彧11 小时前
在CI/CD流水线中如何集成自动化的发布验证和熔断机制?
后端
ᐇ95911 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
间彧11 小时前
如何处理蓝绿部署中的数据迁移和数据库版本兼容性问题?
后端
间彧12 小时前
什么是金丝雀/灰度发布
后端
间彧12 小时前
什么是蓝绿部署
后端
爷_12 小时前
Golang: sqlc 和 goose 最佳实践
后端·go·全栈
听风吟丶12 小时前
MyBatis 深度实战:从基础映射到企业级性能优化
java·tomcat
仟濹13 小时前
【Java 基础】面向对象 - 继承
java·开发语言