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 版本
⚠️ 注意:JDK 和 Java 虽然常被混用,但严格来说 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