hello
发布于 2026-09-29 / 5 阅读
0
0

Spring Boot 4.2.0-M2:LDAPS SSL Bundle 与 OTLP 语义约定,升级前先看什么

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。

升级前检查清单

  1. 依赖:测试分支升到 4.2.0-M2;若用 Cloud,对齐 2026.0.0-M1,并确认 Framework 被拉到 7.1.0-M2。
  2. 仓库:Cloud / 部分里程碑仍可能需要 https://repo.spring.io/milestone(见 Cloud 公告示例)。
  3. LDAP:列出 ldaps://、自定义 trust store、自定义 DirContextAuthenticationStrategy、嵌入式 LDAP 测试;按上文迁到 Bundle 或确认忽略规则。
  4. 可观测性:备份现有 OTLP / Observation 配置;试公共 management.opentelemetry.otlp;若启用 open-telemetry 约定,回归 HTTP 服务端指标与相关告警。
  5. Tomcat 属性迁移(顺带):server.tomcat.additional-tld-skip-patterns 等迁到 server.tomcat.servlet.*;use-relative-redirects 默认改为 true。
  6. Janino:Boot 已去掉 Janino 依赖管理;若你自己还用,请在构建里显式管版本。
  7. 节奏:把月度补丁窗口对齐 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 起算。

参考链接

M2 仍是预览,配置名与默认值在 RC / GA 前仍可能微调;落地前请再对一遍正式发布说明。


评论