Hikari Pool初始化异常:JRE 11启动报错JDK 8运行正常如何解决?
问题诱因
这个异常本质是Oracle JDBC驱动与JDK 11的兼容性问题,和Hikari连接池本身无关,Hikari只是在初始化连接池创建数据库连接时触发了底层驱动的报错。具体触发逻辑如下:
- 你使用的Oracle JDBC驱动版本较低(通常是ojdbc8 12.2.0.1及更早版本),这类驱动是适配JDK 8开发的,没有兼容JDK 9+对
ByteBuffer实现的调整 - 你的Oracle数据库服务端开启了高级网络选项(ANO)的加密/完整性校验,驱动在JDK 11环境下处理加密通信的NIO buffer时,扩容逻辑错误触发
BufferOverflowException - 团队其他成员没有复现,通常是因为他们本地运行环境默认使用JDK 8,或是使用的JDBC驱动版本已经适配JDK 11,或是他们的数据库连接配置主动关闭了ANO加密。
JRE 11环境修复方案
- 方案1:升级Oracle JDBC驱动到适配JDK 11的版本(优先推荐)
选择19.3及以上版本的ojdbc8/ojdbc10驱动,Maven依赖参考如下:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.15.0.0.1</version> </dependency>
- 方案2:临时关闭Oracle客户端加密校验(如果暂时无法升级驱动)
在JDBC连接参数中新增两个配置,关闭客户端的加密协商逻辑,绕开报错的AnoCommNIO模块:
连接串追加参数示例:jdbc:oracle:thin:@//host:port/service_name?oracle.net.encryption_client=REJECTED&oracle.net.crypto_checksum_client=REJECTED
如果是Spring Boot配置文件,在数据源配置下新增:
spring: datasource: hikari: data-source-properties: oracle.net.encryption_client: REJECTED oracle.net.crypto_checksum_client: REJECTED
- 方案3:检查并调整相关buffer配置
检查是否有手动配置Hikari的socket缓冲区大小、JVM的Direct ByteBuffer限制,如果有配置可以适当调大,或删除自定义配置使用默认值。
内容的提问来源于stack exchange,提问作者orion_kid
相关产品推荐
相关产品推荐

