Spring Boot 2.4连接Oracle 11g XE报错T4CConnection.isValid(I)Z
问题根因
报错java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.isValid(I)Z的核心原因是当前使用的Oracle JDBC驱动版本与Oracle 11g XE 11.2.0服务端版本不匹配:Spring Boot 2.4.0默认集成的HikariCP连接池会调用JDBC规范的isValid()方法做连接存活校验,而你引入的ojdbc8是为Oracle 12c及以上版本设计的,向下兼容11g时存在方法实现缺失的问题。
解决方案
步骤1:替换匹配版本的JDBC驱动
Oracle 11.2.0官方对应的驱动版本为ojdbc6,直接修改pom.xml中的ojdbc依赖:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version> </dependency>
如果maven仓库拉取不到该依赖,可下载Oracle官方对应版本的ojdbc6.jar后,执行以下命令手动安装到本地maven仓库:mvn install:install-file -Dfile=<本地ojdbc6.jar的绝对路径> -DgroupId=com.oracle.database.jdbc -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar
步骤2:修改连接池校验配置
在application.properties中添加HikariCP配置,避免连接池直接调用isValid()方法,改用Oracle支持的校验语句:
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL spring.datasource.hikari.validation-timeout=3000 # 驱动类名可调整为11g对应实现 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
步骤3:排查依赖冲突
执行mvn dependency:tree命令查看项目依赖树,确认所有多余的ojdbc8/ojdbc10等其他版本Oracle驱动已被排除,避免多版本驱动冲突。
内容的提问来源于stack exchange,提问作者Arena Devel0

