Spring Boot 2.7.5为何引入JRE8版SQL Server驱动?Java17环境疑问
为什么会引入JRE8版本的驱动?
Spring Boot 2.7.5的依赖管理BOM(spring-boot-dependencies)默认指定的mssql-jdbc版本是10.2.1。在Maven仓库中,这个版本的驱动默认发布的是带jre8分类器的包——当你不指定分类器时,Gradle就会拉取这个默认包。Spring Boot的依赖管理没有针对不同Java版本自动匹配对应JRE分类的逻辑,所以即使你用了Java17,也会默认拿到jre8版本。
JRE8版本驱动在Java17环境下用有没有问题?
mssql-jdbc 10.2.1的jre8版本是编译兼容Java8的,但在Java17环境下大多能正常运行,不会有致命问题。不过它可能缺少针对Java17优化的特性,在严格的模块化场景下可能出现小问题,但常规Spring Boot应用基本不受影响。
如果想完全匹配Java17,你可以手动指定jre17分类器:
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc:10.2.1:jre17'
使用最新版本11.2.1的驱动有没有问题?
Spring Boot 2.7.x的官方BOM没有收录11.2.1版本,说明这个版本没经过Spring Boot官方的全面兼容性测试。但只要驱动符合JDBC规范、兼容Spring Data JPA,升级到11.2.1通常是可行的,不过需要你自己做兼容性验证:
- 确认驱动支持你使用的SQL Server版本
- 测试应用的数据库连接、CRUD操作、事务等核心功能是否正常
- 注意11.2.1可能有少量API变更,但Spring Data JPA的抽象层会屏蔽大部分影响
要使用11.2.1,直接指定版本和分类器即可:
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc:11.2.1:jre17'
官方认证的10.2.1.jre8版本在Java17环境下可行吗?
没错,10.2.1是Spring Boot 2.7.5官方认证并测试过的版本,虽然测试环境可能以Java8/11为主,但官方并没有禁止在Java17上使用这个版本。从实际运行来看,它在Java17环境下是可以正常工作的,如果你追求稳定性,用这个官方指定版本是更稳妥的选择;如果需要Java17的专属优化,换成同版本的jre17分类器就行。
内容的提问来源于stack exchange,提问作者James

