Spring 团队在 2026 年 9 月 25 日发布了 Spring Boot 4.2.0-M2。官方公告把这次里程碑里值得动手试的能力,集中在两块:一是 LDAP / LDAPS 终于接上 SSL Bundle;二是可观测性侧支持 OpenTelemetry 语义约定,并补了跨 traces / metrics / logs 共用的 OTLP 配置。这次 M2 还对齐了 Spring Framework 7.1.0-M2,同时作为 Spring Cloud 2026.0.0-M1(Paddington) 的底板。以上能力与版本关系见 Boot 官方公告、4.2.0-M2 Release Notes 与 Cloud Paddington 公告。
这篇适合正在评估 Boot 4.2 线、手头有 LDAPS 或 OTLP 导出的团队。文中配置来自官方 Release Notes 与相关 Issue / PR,没有在本地项目做运行验证。生产系统请继续以 4.1 稳定线为主;M2 用来做分支验证即可,正式行为以 GA 说明为准。
谁该关心这次 M2
优先看下面几类场景:
- 企业内网用
ldaps://连 AD / OpenLDAP,又不愿靠 JVM 全局trustStore凑合。 - 已经上 Micrometer Tracing / OTLP,希望 traces、metrics、logs 共用一套 endpoint、headers、compression。
- 要试用 OpenTelemetry 稳定语义约定,并接受部分自定义 meter 名称属性会失效。
- 跟 Cloud 一起走:Paddington M1 明确基于 Boot 4.2.0-M2,后续模块版本也是 5.1.0-M1 这一波。
如果只是日常 4.1 补丁升级,不必为这次 M2 动生产依赖;等 GA 或至少 RC 再评估更稳妥。
版本对齐关系(Boot / Framework / Cloud)
| 组件 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 4.2.0-M2 | 2026-09-25 官方宣布;Maven Central 可拉;含 141 项增强 / 文档 / 依赖升级 / 修复 |
| Spring Framework | 7.1.0-M2 | Boot M2 依赖升级清单中明确对齐(release notes / GitHub tag) |
| Spring Cloud | 2026.0.0-M1(Paddington) | 官方写明 based on Boot 4.2.0-M2;核心模块多为 5.1.0-M1 |
顺带一句发布节奏:Michael Minella 在 Releasing Spring for Modern Challenges 里说明,Spring 组合发布从「两周错峰」收成单日 Patch Thursday(每月第三个周一之后的那个周四)。9 月 24 日那趟以里程碑为主,常规补丁列车从 2026-10-22 起按新节奏走。规划依赖升级窗口时,可以按这个固定日期来排。
LDAPS + SSL Bundle:改了什么、怎么配
改了什么
在 4.2.0-M2 之前,LDAP 自动配置支持 ldaps:// URL,但没法把命名 SSL Bundle 挂到自动配置的 LdapContextSource 上。常见做法是改 JVM 全局 trust store、自己造 LdapContextSource,或手写 LDAP SSL socket factory。M2 通过 #51382 把 spring.ldap.ssl.bundle 接进自动配置;配置了 Bundle 且没有自定义 DirContextAuthenticationStrategy 时,会走基于 Bundle 的 SSLSocketFactory 的 TLS 认证策略。自定义 strategy 仍优先。详见 Issue #51218 与 M2 Release Notes。
嵌入式 LDAP 也补了 LDAPS:spring.ldap.embedded.ssl.bundle 可以同时配服务端与客户端;启用嵌入式 SSL 时,必须同时给 Bundle,否则不再默默起明文监听。
怎么配(客户端 LDAPS)
官方示例形态如下(属性名以 Release Notes 为准):
spring:
ldap:
urls: ldaps://ldap.example.com:636
username: cn=service,ou=users,dc=example,dc=com
password: secret
ssl:
bundle: ldap
ssl:
bundle:
jks:
ldap:
truststore:
location: classpath:ldap-truststore.p12
password: changeit
type: PKCS12要点:
spring.ldap.ssl.bundle指向已定义的 Bundle 名。- 配了 Bundle 后,
spring.ldap.urls默认会切到ldaps://localhost:636(若你没另写 URL)。 - 若只要平台默认信任材料、不单独挂 Bundle,可设
spring.ldap.ssl.enabled=true。 - Bundle 热重载后的 key / trust 材料,后续新建连接会自动用上。
嵌入式 LDAP(测试场景)
spring:
ldap:
base: "dc=spring,dc=io"
embedded:
base-dn: "dc=spring,dc=io"
ssl:
bundle: "example"启用嵌入式服务器时,连接形态由服务端决定:spring.ldap.urls、spring.ldap.username / password、以及 spring.ldap.ssl.* 会被忽略,改看 spring.ldap.embedded.*(含 credential 与 ssl.bundle)。生产用的 spring.ldap.* 不必再为测试专门清空。若同时在 spring.ldap.base-environment 里塞 java.naming.ldap.factory.socket 又配了 SSL Bundle,应用会直接启动失败——二选一,不要叠用。
需要客户端与嵌入式服务端使用不同 SSL 配置时,自定义 LdapConnectionDetails Bean。
升级注意
- 检查是否已有自定义
DirContextAuthenticationStrategy:有的话,它会压过 Bundle 自动接线。 - 原先靠
javax.net.ssl.trustStore的全局方案,可逐步迁到命名 Bundle,便于多信任域共存。 spring.ldap.embedded.ssl.enabled=true却没配 Bundle 的旧测试配置,升级后会按新规则要求 Bundle。- 嵌入式场景下,别再假设
spring.ldap.urls/spring.ldap.ssl.enabled仍生效。
OTLP / OpenTelemetry 语义约定:改了什么、配置怎么统一
语义约定切换
M2 增加了对 OpenTelemetry 稳定语义约定的支持。开关是:
management.observations.conventions=open-telemetry默认仍是 Micrometer 约定。切到 open-telemetry 后,像 management.observations.http.server.requests.name 这类用来改 meter 名称的属性不再生效。该项依赖 Framework 7.1 侧对 servlet / reactive 两端约定的对齐(见 #49241),因此出现在 4.2 线而非更早的 4.1。
共用 OTLP 配置
过去 traces / metrics / logs 往往各自配一遍 endpoint、headers、compression。M2 新增公共前缀 management.opentelemetry.otlp(OtlpProperties,since 4.2.0):
management:
opentelemetry:
otlp:
endpoint: https://otel-collector.example.com:4318
headers:
Authorization: Bearer ${OTEL_TOKEN}
compression: gzip行为(以 M2 Release Notes 为准):
management.opentelemetry.otlp.endpoint:某 signal 未单独配置 endpoint 时作回退;HTTP 传输会自动追加/v1/traces、/v1/logs、/v1/metrics。management.opentelemetry.otlp.headers:与 signal 级 headers 合并,同名键以 signal 级为准。management.opentelemetry.otlp.compression:signal 未单独配置时回退到公共值。
signal 级属性仍然优先。API 类说明见 OtlpProperties。合并实现来自 #50461。
升级注意
- 先盘点现有
management.otlp.*/ 各 signal 专用属性,再决定哪些收到公共前缀,哪些继续覆盖。 - 打开 OpenTelemetry 约定后,核对仪表板与告警里依赖旧 meter 名的查询。
- 另有
management.tracing.mdc.trace-id-key/span-id-key可定制 MDC 键名(默认traceId/spanId),日志相关字段会跟着走,一般无需再改 pattern。 management.metrics.observations.ignored-meters已移除;若仍要为 active Observation 自动建LongTaskTimer,需显式设management.metrics.observations.include-active-long-task-timer=true。
升级前检查清单
- 依赖:测试分支升到
4.2.0-M2;若用 Cloud,对齐2026.0.0-M1,并确认 Framework 被拉到 7.1.0-M2。 - 仓库:Cloud / 部分里程碑仍可能需要
https://repo.spring.io/milestone(见 Cloud 公告示例)。 - LDAP:列出
ldaps://、自定义 trust store、自定义DirContextAuthenticationStrategy、嵌入式 LDAP 测试;按上文迁到 Bundle 或确认忽略规则。 - 可观测性:备份现有 OTLP / Observation 配置;试公共
management.opentelemetry.otlp;若启用open-telemetry约定,回归 HTTP 服务端指标与相关告警。 - Tomcat 属性迁移(顺带):
server.tomcat.additional-tld-skip-patterns等迁到server.tomcat.servlet.*;use-relative-redirects默认改为true。 - Janino:Boot 已去掉 Janino 依赖管理;若你自己还用,请在构建里显式管版本。
- 节奏:把月度补丁窗口对齐 Patch Thursday(自 2026-10-22 起的常规补丁日),与安全公告页 spring.io/security 一起看。
和现有 4.1 生产线怎么并存验证
Boot 4.2.0-M2 与 4.1.x 稳定线并存时,建议单独开验证分支或独立模块,不要在同一 pom / build.gradle 里混用两套 BOM。Cloud 用户尤其要注意:Paddington M1 绑定的是 Boot 4.2.0-M2,而当前生产若仍在 2025.x / 更早的 Cloud 列车,不能只升 Boot、不升 Cloud BOM。反过来,若只想试 LDAP SSL Bundle 或 OTLP 公共配置,也可以只升 Boot、暂不接 Cloud,把验证范围压到单体或边缘服务。
验证顺序可以写成四步:先让应用在 M2 上空跑启动与健康检查;再打开 LDAPS Bundle(或嵌入式 LDAPS 测试);再迁 OTLP 公共属性并对比导出 payload;最后才决定是否打开 management.observations.conventions=open-telemetry。语义约定会改指标命名习惯,放到最后可以减少一次排障里同时出现「连不上 Collector」和「仪表盘查不到序列」两件事。
依赖升级清单里还能看到 Micrometer 1.18.0-M2、Micrometer Tracing 1.8.0-M2、OpenTelemetry 1.65.0、Reactor Bom 2026.0.0-M2 等。若你们对 Micrometer 注册表、自定义 MeterBinder、或 Brave / OTel bridge 有深度定制,升级前应对照这些里程碑的变更说明,而不是只看 Boot 公告里的两句摘要。
配置对照:旧写法 vs M2 公共 OTLP
升级时常见情况是 traces、metrics、logs 各自写了几乎一样的 endpoint 与 Authorization header。M2 之后可以先落公共配置,再只保留确有差异的 signal 覆盖。示意:
# 公共回退
management:
opentelemetry:
otlp:
endpoint: https://otel-collector.example.com:4318
headers:
Authorization: Bearer ${OTEL_TOKEN}
compression: gzip
# 仅当某个 signal 需要不同地址或头时再覆盖,例如:
# otlp:
# tracing:
# endpoint: https://traces.example.com/v1/traces具体 signal 级属性前缀以你当前 Boot 文档 / additional-spring-configuration-metadata 为准;M2 Release Notes 强调的是「signal 级优先,否则回退公共值,并在 HTTP 传输下自动拼 /v1/* 路径」。若你本地仍使用更早的 management.otlp.tracing.* 一类属性,升级分支里用 --debug 或配置元数据检索确认是否更名,不要照搬未经验证的旧前缀。路径拼接与 header 合并细节以 GA 文档为准。
Patch Thursday 对排期的实际影响
官方把组合发布收成单日,动机是安全报告量上升(文中提到自 3 月起社区安全报告月均近 80、并已修复超过 160 个 CVE),错峰两周会导致同一列车里每天都有 CVE 修复散落。对业务团队的含义很直接:月度依赖升级、镜像重建、回归窗口可以按「第三个周一之后的周四」对齐;安全公告也改到可按 CVE / 严重级别 / 项目过滤的 spring.io/security。9 月那趟以里程碑为主,不要把 9 月 24 日附近的 M 版当成常规安全补丁日;常规 Patch Thursday 从 2026-10-22 起算。
参考链接
- Spring Boot 4.2.0-M2 available now
- Spring Boot 4.2.0-M2 Release Notes
- GitHub Release v4.2.0-M2
- Spring Cloud 2026.0.0-M1 (Paddington)
- Releasing Spring for Modern Challenges(Patch Thursday)
- Issue #51218 / PR #51382:LDAP SSL Bundle
- Issue #49241:OpenTelemetry semantic conventions
- Issue #50461:Common OTLP configuration
- OtlpProperties API(4.2)
M2 仍是预览,配置名与默认值在 RC / GA 前仍可能微调;落地前请再对一遍正式发布说明。