当前位置: 首页 > news >正文

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 官方发布说明。
http://www.dtcms.com/a/350823.html

相关文章:

  • C++ namespace
  • 国内外大模型体验与评测:洞察智能时代的核心驱动力一、引言
  • DataX HdfsWriter 插件文档
  • 实现自己的AI视频监控系统-第二章-AI分析模块2
  • Java全栈开发面试实战:从基础到微服务的完整技术解析
  • Oracle数据库如何修改字段中的两个字符
  • CF2133C 下界(The Nether)
  • 敏捷价值实证:亚马逊如何用敏捷破解技术项目的“价值迷雾”?
  • 学习做动画3.八方移动
  • SW - 增加导出STL数据中的三角面数,增加别人逆向建模的难度
  • Excel比较两列的值是否相同
  • ViT系列网络系统性分析:从架构创新到未来趋势
  • SSH 反向隧道:快速解决服务器网络限制
  • Frida JavaScript API 总结
  • 【数据库】dbeaver 查询clickhouse,表内时间与真实时间差8小时
  • 基于Springboot + vue3实现的宿舍管理系统
  • [pilot智驾系统] docs | 用户界面状态(UIState)
  • 第十八节:骨骼动画 - 角色动画控制
  • 时间序列异常检测实战:HMM与LSTM方法解析
  • 在华为云服务器上使用Ansible部署LNMP环境【玩转华为云】
  • Ubuntu22.04 解决eth0未托管问题
  • golang 基础类 八股文400题
  • Redis面试精讲 Day 30:Redis面试真题解析与答题技巧
  • 蓝牙AOA定位方案:重塑精准定位新纪元,赋能行业智能化升级
  • 16-day13强化学习和训练大模型
  • 深入理解 Roo Code 的自动批准功能
  • Node.js(1)—— Node.js介绍与入门
  • 从0开始学习Java+AI知识点总结-25.web实战(AOP)
  • 人工智能-python-深度学习-数据准备
  • 路径总和。