已开启
examples: 补充 HikariCP + MySQL JDBC 连接 openGauss B 兼容库验证工程 #105
examples: 补充 HikariCP + MySQL JDBC 连接 openGauss B 兼容库验证工程 #105
已开启
cuiyunhao-2026创建于 22 天前
cuiyunhao-2026
22 天前

【实现内容】

在 OpengaussCompatibility2hikari 目录下提供基于 HikariCP 连接池与 MySQL JDBC 连接 openGauss B 兼容模式数据库的验证工程,整体覆盖旧草稿,改为导师严谨验证工程。

  • OpengaussCompatibility2hikari/src/main/java/com/linyu/ospp/HikariVerificationRunner.java:可运行验证主类,覆盖连接池初始化、CRUD、事务提交、连接池上限等待、真实并发数据库操作、资源关闭全流程,共 13 项验证
  • OpengaussCompatibility2hikari/src/main/java/com/linyu/ospp/SpringBootOsppApplication.java 与 User.java:Spring Boot 启动类与实体
  • OpengaussCompatibility2hikari/src/main/java/com/linyu/ospp/HighConcurrencyBusinessDemo.java:大并发业务场景实测主类
  • OpengaussCompatibility2hikari/src/main/java/com/linyu/ospp/SqlCategoryVerificationRunner.java:五类标准 SQL 操作独立验证程序,不依赖 Spring Boot,覆盖 DDL、DML、DQL、DCL、TCL 全部操作类别及并发连接测试,共 28 项,其中 26 项 PASS、2 项 INFO
  • OpengaussCompatibility2hikari/README.md:验证工程说明,包含环境、依赖、运行方式、验证项与五类操作说明
  • OpengaussCompatibility2hikari/spring端-通过清单.txt 与 openGauss端-验证清单.txt:Spring Boot 集成验证实测输出证据,13 项全部 PASS
  • OpengaussCompatibility2hikari/sql_category_verification.txt 与 五类SQL操作自验清单.txt:五类标准 SQL 操作实测输出证据
  • 依赖:JDK 11 及以上,实测环境 JDK 17.0.19;Spring Boot 2.5.6、HikariCP 5.1.0、MySQL Connector/J 8.0.20

【根因分析】:

社区缺少基于 HikariCP 连接池连接 openGauss B 兼容库的可运行示例与自测证据;开源之夏 2024 报告曾记录 MySQL 驱动经 HikariCP 无法建连、事务隔离级别 default 无法映射的问题,需要在新版本下重新实测验证。

历史根因位于 dolphin 插件对 MySQL 系统变量 @@transaction_isolation、@@session.transaction_isolation、@@tx_isolation 的兼容实现。旧版返回字面量 default,更早版本报 missing FROM-clause entry for table "session",HikariCP 探测隔离级别时无法映射而建连失败;修复后返回当前真实隔离级别。版本边界为 6.0.0-RC1 的 dolphin 可复现,7.0.0-RC3 的 dolphin 5.2 已不复现。详见 docs 仓 PR #8777 的历史兼容性提示。

【实现方案】:

以导师 cyh-HikariCP 的 spring-boot-ospp 验证工程整体覆盖既有 OpengaussCompatibility2hikari 工程。示例使用 HikariCP 与 mysql-connector-java 驱动连接 B 兼容库,执行 SELECT 1、版本探测、DDL、INSERT、SELECT、UPDATE、DELETE、事务提交、连接池参数校验、连接池上限等待、10 个 worker 真实并发增删改查提交等用例,输出统一结论。

另增独立五类操作验证程序,逐类覆盖 DDL 的 CREATE、ALTER、DROP、TRUNCATE、CTAS、INDEX 共 7 项,DML 的单行 INSERT、批量 INSERT、UPDATE、DELETE 共 4 项 PASS 加 getGeneratedKeys 1 项 INFO,DQL 的 SELECT、WHERE、ORDER BY、聚合、GROUP BY、DISTINCT、子查询共 7 项,DCL 的 GRANT、REVOKE、权限查询共 4 项,TCL 的 COMMIT、ROLLBACK、SAVEPOINT 共 3 项 PASS 加隔离级别查询 1 项 INFO,以及并发连接 10 个 worker 共 1 项。

结论表与分类统计由程序按实际执行结果输出,DCL 的 GRANT 与 REVOKE 在权限不足时按 WARN 单独计数,避免结论与实测输出不一致。

【连接链路流程】:

本验证工程实测验证的正是以下链路:Spring Boot 应用通过 HikariCP 连接池,使用 MySQL Connector/J 驱动,连上 openGauss B 兼容模式数据库。链路核心是 dolphin 插件在 openGauss 服务端模拟了一个 MySQL 服务器,因此上层的 Spring Boot、HikariCP、MySQL Connector/J 都以为自己在连接标准 MySQL 数据库,完全不知道底层是 openGauss。只要 Connector/J 能正常完成 TCP 握手与认证,后续 SQL 执行与事务管理均建立在 JDBC 标准接口之上,不受底层数据库差异影响。

核心流程:

Spring Boot → HikariDataSource 与 HikariConfig → HikariCP 连接池 HikariPool → MySQL Connector/J 的 Driver.connect 创建 ConnectionImpl → TCP 连接 host:3306 完成 MySQL 协议握手与认证 → dolphin 插件在 openGauss 服务端模拟 MySQL 服务器 → openGauss B 兼容模式数据库执行 SQL 与事务

flowchart TD
    A[Spring Boot 应用 DataSourceAutoConfiguration] --> B[HikariDataSource 加载 HikariConfig]
    B --> C[HikariCP 连接池 HikariPool 创建与管理 PoolEntry 物理连接]
    C --> D[MySQL Connector/J Driver.connect 创建 ConnectionImpl]
    D --> E[TCP 连接 host:3306 完成 MySQL 协议握手与认证]
    E --> F[dolphin 插件在 openGauss 服务端模拟 MySQL 服务器]
    F --> G[openGauss B 兼容模式数据库执行 SQL 与事务]
    G -->|结果按 MySQL 协议封装返回| E

代码触发节点:

  1. Spring Boot 启动:DataSourceAutoConfiguration 读取 spring.datasource 配置,按 type 创建 HikariDataSource Bean。
  2. HikariCP 初始化:HikariConfig 加载 URL、用户名、密码、驱动类名;HikariPool 启动并按 minimumIdle 创建初始连接。
  3. 驱动建连:HikariPool 需新建物理连接时调用 DriverDataSource.getConnection(),由 com.mysql.cj.jdbc.NonRegisteringDriver.connect() 创建 ConnectionImpl,其构造函数触发 createNewIO() 发起到 host:3306 的 TCP 连接并完成 MySQL 协议握手与认证,认证使用 set_native_password 设置的 MySQL 原生密码。
  4. dolphin 接收:openGauss 服务端 gaussdb 进程在 dolphin_server_port 监听,由协议处理模块解析 MySQL 协议报文,用 dolphin 专用密码完成认证并创建模拟 MySQL 连接会话,再将 SQL 转换为 openGauss 可识别的逻辑执行。
  5. 业务执行:HikariPool 将连接包装为 PoolEntry 入池;业务从池借连接执行 SQL,dolphin 将结果按 MySQL 协议格式封装返回客户端。

【本轮审查问题修复】:

  1. SqlCategoryVerificationRunner 结论表 DCL 行写死"部分 WARN",与实测 4 项全部 PASS 矛盾;现改为按实际执行结果统计 PASS、WARN、INFO 数量,并按中文字符宽度对齐输出。
  2. 同程序最终结论句漏列 DCL 通过项与 DML-05 的 INFO,现补齐,结论句与汇总表、明细三者一致。
  3. HikariVerificationRunner 的 verifyPoolLimit 中 catch TimeoutException 分支位于 isDone() 为 true 的代码块内,不可达;改为不带超时的 get() 取值并删除该分支。
  4. 同方法连接池上限探测依赖固定 1 秒窗口,当 connectionTimeout 小于该窗口时,连接池按配置正常超时却被误判为"未进入等待队列";现观察窗口取 connectionTimeout 的一半并夹在 200 毫秒到 1000 毫秒之间,同时把 SQLTransientConnectionException 判定为连接池上限生效的正常表现。
  5. SpringBootOsppApplicationTests 仅关闭连接池 fail-fast,未关闭 ospp.verify.enabled,无数据库环境下仍会执行启动验证;现补充该开关。
  6. 两份实测证据文件与 README 的统计口径同步修正,并修复证据文件中一处重复的输出前缀。

【关联需求或issue】:

Issue: https://gitcode.com/opengauss/opensource-intership/issues/47
关联PR: https://gitcode.com/opengauss/docs/merge_requests/8777

【开发自验报告】:

实测验证通过,关键项摘要如下。环境为 HikariCP 5.1.0、mysql-connector-java 8.0.20、openGauss 7.0.0 build 93bfec54,dolphin 功能等价于 7.0.0-RC3。

Spring Boot 集成验证共 13 项:

  1. 连接有效性校验结果为 true,SELECT 1 返回 1
  2. 版本探测返回 openGauss 7.0.0 build 93bfec54
  3. CRUD 的 INSERT、SELECT、UPDATE、DELETE 均成功
  4. 事务提交校验通过,spring-transaction 数据已提交并可查询
  5. 连接池上限等待校验通过,借满 maximumPoolSize 等于 10 后,第 11 条连接没有突破最大连接数,而是在等待空闲连接;释放 1 条后等待中的请求恢复获取连接并执行 SQL
  6. 并发真实数据库操作校验通过,10 个 worker 均完成 insert、select、update、select、delete、commit

五类标准 SQL 操作验证共 28 项,其中 26 项 PASS、2 项 INFO:

  1. DDL 共 7 项:CREATE TABLE 含 SERIAL、VARCHAR、INT、DECIMAL、TIMESTAMP 字段,CREATE INDEX、ALTER ADD COLUMN、ALTER RENAME COLUMN、TRUNCATE TABLE、DROP TABLE、CREATE TABLE AS SELECT,全部 PASS
  2. DML 共 5 项:单行 INSERT、批量 INSERT、条件 UPDATE、条件 DELETE 共 4 项 PASS;getGeneratedKeys 为 INFO,驱动未返回自增主键,不影响 CRUD 功能
  3. DQL 共 7 项:SELECT、WHERE 过滤、ORDER BY 加 LIMIT 分页、聚合 COUNT、SUM、AVG、MIN、MAX,GROUP BY 加 HAVING、DISTINCT 去重、子查询,全部 PASS
  4. DCL 共 4 项:GRANT SELECT、GRANT 多权限、REVOKE、权限查询,本次实测全部 PASS,未出现 WARN
  5. TCL 共 4 项:COMMIT 显式提交、ROLLBACK 回滚、SAVEPOINT 加 ROLLBACK TO SAVEPOINT 部分回滚共 3 项 PASS;事务隔离级别查询为 INFO,仅查询不计入 PASS
  6. 并发连接共 1 项:10 个 worker 同时从 HikariCP 持连接执行完整 insert、select、update、delete、commit 事务,10 个全部 PASS

完整用例明细与实测输出见 sql_category_verification.txt、五类SQL操作自验清单.txt 与 spring端-通过清单.txt。

是否可以添加fastcheck测试用例,如是,请补充fastcheck用例

否。examples 仓为示例与验证工程,不纳入服务端 fastcheck 回归用例体系,本次以独立验证工程加实测清单的形式提供证据。

是否涉及资料修改,如是,在docs仓库补充资料

是。对应开发指导文档已在 docs 仓 PR #8777 补充,含五类操作示例章节。

是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)

否。示例工程不修改数据库对象或执行态。

是否考虑在线扩容等扩展场景

否。

是否考虑异常场景/并发场景/前向兼容/性能场景

是。验证工程已覆盖连接池参数生效、连接池上限等待不突破最大连接数、真实并发数据库操作、五类标准 SQL 全量操作、并发连接多线程同时持连接执行完整事务。异常场景如错误口令与网络中断可在后续迭代中增强。

是否对其他模块产生影响

否。独立验证工程,不影响其他模块。

是否需要回合补丁版本(5.0、6.0)…

否。无服务端代码修复,不涉及回合。

针对Plugin仓dolphin插件,新增/修改的代码是否已使用 DOLPHIN 宏进行控制…

否。本 PR 不含 dolphin 插件代码修改。

【当前PR是否有AI参与】:

  1. AI Agent 平台: CodeBuddy 4.10.4
  2. AI 模型: Hy3
  3. Prompt上下文: 128k

【其他说明】:

关键结论:开源之夏 2024 报告中 MySQL 驱动经 HikariCP 无法建连、事务隔离级别 default 无法映射的问题,根因在 dolphin 旧版对 @@transaction_isolation 返回 default,无法被 HikariCP 映射;该兼容性已在 openGauss 7.0.0-RC3 的 dolphin 5.2 修复,现可正常建连并完成 CRUD 与事务。本工程在新版本下实跑,五类标准 SQL 操作 28 项中 26 项 PASS、2 项 INFO,Spring Boot 集成验证 13 项全部通过。

likedislike
合并受阻
cuiyunhao-2026cuiyunhao-2026
22 天前 创建了 pull request,commit 163f07f4
opengauss_botopengauss_bot成员
22 天前 添加了label:sig/Infra
opengauss_bot
opengauss_bot成员
22 天前 评论:

Welcome To openGauss Community

Hey @cuiyunhao-2026 , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands.

Contact Guide

If you have any questions, please contact the SIG: Infra ,
and any of the maintainers: @CarrotGo, @chendong76, @chenxiaobin19, @congzhou2603, @dodders, @hwworkholic, @jemappellehc, @muyulinzhong, @quemingjian, @shenzheng4, @shirley_zhengx, @superlchf, @totaj, @wlff234, @wofanzheng, @ywzq1161327784 ,
and any of the committers: @ailoooong, @gzbang, @libiao2024, @zhangxubo .

likedislike
opengauss_botopengauss_bot成员
22 天前 添加了label:opengauss-cla/no
cuiyunhao-2026cuiyunhao-2026
22 天前 修改了pull request 的描述
此处折叠了513条消息 查看更多
opengauss_botopengauss_bot成员
14 小时前 添加了label:opengauss-cla/yes
opengauss_bot
opengauss_bot成员
14 小时前 评论:

CLA Signature Pass

cuiyunhao-2026, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
cuiyunhao-2026cuiyunhao-2026
14 小时前 修改了pull request 的描述
opengauss_botopengauss_bot成员
14 小时前 删除了label:ai-compliance-failed
opengauss_botopengauss_bot成员
14 小时前 添加了label:ai-compliance-successful