1. 概述

在本文中,我们将演示如何在运行时编程获取当前应用所使用的 Spring 框架、JDK 以及 Java 的版本信息。这类信息在日志输出、环境诊断或版本兼容性校验时非常有用,尤其在多环境部署踩坑时,能快速定位问题。

2. 获取 Spring 版本

要获取当前项目使用的 Spring 框架版本,最简单粗暴的方式是使用 Spring 自带的工具类 SpringVersion

✅ 推荐做法:调用 SpringVersion.getVersion() 静态方法,一行代码搞定:

import org.springframework.core.SpringVersion;

// 示例:断言当前 Spring 版本
assertEquals("5.1.10.RELEASE", SpringVersion.getVersion());

这个方法返回的是 Spring Framework 的版本号字符串,适用于 Spring 4.x 和 5.x 所有主流版本。无需依赖 Spring 上下文,类加载即可使用,非常适合在启动日志中打印框架版本。

3. 获取 JDK 版本

⚠️ 注意:JDKJava 虽然常被混用,但严格来说 JDK 是开发工具包,而 Java 是语言/平台。它们的版本号格式也可能略有不同。

在 Spring 4.x 中,可以通过 JdkVersion 类获取 JDK 版本:

// Spring 4.x 专用,Spring 5+ 已移除 ❌
// org.springframework.core.JdkVersion.getJavaVersion();

但由于 JdkVersion 在 Spring 5.x 中被移除,我们不能再依赖它。取而代之的是直接读取系统属性。

✅ 正确做法:通过 System.getProperty("java.version") 获取:

assertEquals("1.8.0_191", System.getProperty("java.version"));

或者,如果你项目中用了 Spring Boot,也可以使用其封装的 SystemProperties 工具类(功能一样,只是包装了一层):

import org.springframework.boot.system.SystemProperties;

assertEquals("1.8.0_191", SystemProperties.get("java.version"));

📌 小贴士:java.version 是 JVM 启动时自动设置的标准系统属性,所有 Java 环境都支持,兼容性最好。

4. 获取 Java 版本(运行时版本)

有时候我们不仅想知道 java.version 字符串,还想以结构化方式判断当前 Java 版本,比如做版本兼容判断(如是否 ≥ Java 8)。

这时推荐使用 Spring Boot 提供的 JavaVersion 枚举类(位于 spring-boot 模块):

import org.springframework.boot.system.JavaVersion;

// 获取当前 Java 版本枚举
JavaVersion version = JavaVersion.getJavaVersion();

// 输出为字符串,格式如 "1.8"
assertEquals("1.8", version.toString());

// 可用于版本比较
if (JavaVersion.getJavaVersion().isAtLeast(JavaVersion.ELEVEN)) {
    // 启用仅 Java 11+ 支持的特性
}

✅ 优势:

  • 返回的是 JavaVersion 枚举(如 EIGHT, ELEVEN, SEVENTEEN),便于做逻辑判断
  • 提供 isAtLeast()isOlderThan() 等实用方法,避免手动解析字符串

📌 注意:该类在 spring-boot 包中,非 Spring Framework 原生提供。如果你的项目没引入 Spring Boot,需要额外添加依赖或改用字符串解析。

5. 总结

信息类型 推荐方式 关键类/属性
✅ Spring 版本 SpringVersion.getVersion() org.springframework.core.SpringVersion
✅ JDK 版本 System.getProperty("java.version") 标准系统属性
✅ Java 运行版本 JavaVersion.getJavaVersion() org.springframework.boot.system.JavaVersion
  • 所有方法均可在应用启动早期调用,无需上下文初始化
  • 避免使用已废弃的 JdkVersion(Spring 5+ 不可用)
  • 在诊断环境问题时,建议在日志中统一输出这三个版本,便于排查兼容性“坑”

示例代码已整理至 GitHub:https://github.com/example/spring-version-demo


原始标题:Finding the Spring Version

« 上一篇: Apache Beam 介绍