<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>信创 on 文艺技术笔记</title><link>https://wenyiblog.top/tags/%E4%BF%A1%E5%88%9B/</link><description>Recent content in 信创 on 文艺技术笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>文艺技术笔记 | 软件工程师文艺</copyright><lastBuildDate>Fri, 19 Jun 2026 23:30:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/tags/%E4%BF%A1%E5%88%9B/index.xml" rel="self" type="application/rss+xml"/><item><title>国产数据库连接池配置踩坑记：达梦、GaussDB、人大金仓的最佳实践对比</title><link>https://wenyiblog.top/2026/06/domestic-db-connection-pool-guide/</link><pubDate>Fri, 19 Jun 2026 23:30:00 +0800</pubDate><guid>https://wenyiblog.top/2026/06/domestic-db-connection-pool-guide/</guid><description>&lt;h2 id="信创替代的坑从连接池就开始了"&gt;&lt;a href="#%e4%bf%a1%e5%88%9b%e6%9b%bf%e4%bb%a3%e7%9a%84%e5%9d%91%e4%bb%8e%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%b0%b1%e5%bc%80%e5%a7%8b%e4%ba%86" class="header-anchor"&gt;&lt;/a&gt;信创替代的坑，从连接池就开始了
&lt;/h2&gt;&lt;p&gt;做过信创项目的人都知道，国产数据库替代最难的不是数据迁移，而是&lt;strong&gt;应用层的适配&lt;/strong&gt;。你以为换个数据库驱动、改个连接字符串就完事了，结果上线后各种问题接踵而至：连接池耗尽、查询超时、事务异常、性能断崖式下降。&lt;/p&gt;
&lt;p&gt;这些问题里有相当一部分跟连接池配置有关。国产数据库的 JDBC 驱动不是 MySQL/Oracle 驱动的简单复刻——它们在连接管理、事务模型、协议实现上都有自己的&amp;quot;个性&amp;quot;。如果你用 HikariCP 的默认配置直接连国产数据库，大概率会踩坑。&lt;/p&gt;
&lt;p&gt;本文从一个实际项目出发，对比**达梦（DM8）、GaussDB（华为）、人大金仓（KingbaseES）**三款主流国产数据库在连接池配置上的差异和注意事项。&lt;/p&gt;
&lt;h2 id="三款数据库的基本连接配置"&gt;&lt;a href="#%e4%b8%89%e6%ac%be%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%bf%9e%e6%8e%a5%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;三款数据库的基本连接配置
&lt;/h2&gt;&lt;p&gt;先看最基础的 JDBC 连接配置对比：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置项&lt;/th&gt;
&lt;th&gt;达梦 DM8&lt;/th&gt;
&lt;th&gt;GaussDB&lt;/th&gt;
&lt;th&gt;人大金仓 KingbaseES&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JDBC 驱动类&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dm.jdbc.driver.DmDriver&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.postgresql.Driver&lt;/code&gt;（兼容 PG 协议）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.kingbase8.Driver&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;URL 格式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jdbc:dm://host:5236/dbname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jdbc:postgresql://host:5432/dbname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jdbc:kingbase8://host:54321/dbname&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;默认端口&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5236&lt;/td&gt;
&lt;td&gt;5432&lt;/td&gt;
&lt;td&gt;54321&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;协议兼容性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自有协议&lt;/td&gt;
&lt;td&gt;PostgreSQL 协议兼容&lt;/td&gt;
&lt;td&gt;PostgreSQL 协议兼容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;连接建立耗时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;约 50-80ms&lt;/td&gt;
&lt;td&gt;约 20-40ms&lt;/td&gt;
&lt;td&gt;约 30-50ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;默认字符集&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UTF-8（可配置 GBK）&lt;/td&gt;
&lt;td&gt;UTF-8&lt;/td&gt;
&lt;td&gt;UTF-8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;第一个发现：&lt;strong&gt;GaussDB 和人大金仓都兼容 PostgreSQL 协议&lt;/strong&gt;，这意味着很多 PG 生态的工具（Flyway、Liquibase、MyBatis-Plus 的 PG 方言）可以直接用。达梦则有自己的协议，需要专用驱动和专用方言。&lt;/p&gt;
&lt;h2 id="hikaricp-配置对比"&gt;&lt;a href="#hikaricp-%e9%85%8d%e7%bd%ae%e5%af%b9%e6%af%94" class="header-anchor"&gt;&lt;/a&gt;HikariCP 配置对比
&lt;/h2&gt;&lt;p&gt;HikariCP 是目前 Java 生态最主流的连接池。以下是三款数据库的推荐配置和关键差异：&lt;/p&gt;
&lt;h3 id="达梦-dm8"&gt;&lt;a href="#%e8%be%be%e6%a2%a6-dm8" class="header-anchor"&gt;&lt;/a&gt;达梦 DM8
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datasource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver-class-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dm.jdbc.driver.DmDriver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:dm://192.168.1.100:5236/PROD?compatibleMode=oracle&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SYSDBA&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;xxx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hikari&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maximum-pool-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minimum-idle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;idle-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;300000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-lifetime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;900000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-test-query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SELECT 1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 达梦特有：必须开启&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auto-commit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 达梦驱动不支持 isValid() 检测，必须用 test query&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-init-sql&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SELECT 1 FROM DUAL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;达梦的关键注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;不要用 &lt;code&gt;Connection.isValid()&lt;/code&gt; 做连接检测&lt;/strong&gt;。达梦的 JDBC 驱动在某些版本下对 &lt;code&gt;isValid()&lt;/code&gt; 的实现有 bug——连接明明已经断了，&lt;code&gt;isValid()&lt;/code&gt; 还是返回 true。必须用 &lt;code&gt;connection-test-query: SELECT 1&lt;/code&gt; 替代。&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;&lt;code&gt;max-lifetime&lt;/code&gt; 必须小于数据库端的会话超时时间&lt;/strong&gt;。达梦默认会话超时是 600 秒（10 分钟），如果你的 &lt;code&gt;max-lifetime&lt;/code&gt; 设成 1800000（30 分钟），连接池里的连接可能已经被数据库端关闭了但池子不知道，下次拿出来用就报错。建议 &lt;code&gt;max-lifetime&lt;/code&gt; 设为数据库超时的 2/3。&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;&lt;code&gt;compatibleMode&lt;/code&gt; 参数很重要&lt;/strong&gt;。达梦支持 Oracle 兼容模式和 MySQL 兼容模式。如果你的项目是从 Oracle 迁过来的，用 &lt;code&gt;compatibleMode=oracle&lt;/code&gt;；如果是从 MySQL 迁过来的，用 &lt;code&gt;compatibleMode=mysql&lt;/code&gt;。不设置的话走达梦原生模式，部分 SQL 语法可能不兼容。&lt;/p&gt;
&lt;h3 id="gaussdb华为"&gt;&lt;a href="#gaussdb%e5%8d%8e%e4%b8%ba" class="header-anchor"&gt;&lt;/a&gt;GaussDB（华为）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datasource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver-class-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;org.postgresql.Driver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:postgresql://192.168.1.100:5432/proddb?currentSchema=public&amp;amp;sslmode=disable&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gaussdb_user&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;xxx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hikari&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maximum-pool-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minimum-idle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;idle-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;300000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-lifetime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1200000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# GaussDB 兼容 PG 协议，isValid() 可用&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 但推荐还是用 test query 更稳定&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-test-query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SELECT 1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# GaussDB 连接参数&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dataSourceProperties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;socketTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connectTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prepareThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;GaussDB 的关键注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;可以用标准 PG 驱动&lt;/strong&gt;。GaussDB 兼容 PostgreSQL 协议，用 &lt;code&gt;org.postgresql.Driver&lt;/code&gt; 就能连。但建议用华为官方提供的增强版 PG 驱动，支持 GaussDB 特有功能（如 MOT 引擎、分布式事务）。&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;分布式版本的连接行为不同&lt;/strong&gt;。GaussDB 分布式版（DWS）通过 CN（Coordinator Node）路由 SQL，连接池应该连 CN 而不是 DN（Data Node）。CN 可能有多个，建议配合负载均衡使用。&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;&lt;code&gt;prepareThreshold&lt;/code&gt; 需要注意&lt;/strong&gt;。PG 协议默认在 PreparedStatement 执行 5 次后切换到 Server-Side Prepared Statement。GaussDB 在某些版本下对 Server-Side Prepared Statement 的处理有性能问题，建议设为 &lt;code&gt;-1&lt;/code&gt;（永远不使用）或 &lt;code&gt;0&lt;/code&gt;（每次都用）。&lt;/p&gt;
&lt;h3 id="人大金仓-kingbasees"&gt;&lt;a href="#%e4%ba%ba%e5%a4%a7%e9%87%91%e4%bb%93-kingbasees" class="header-anchor"&gt;&lt;/a&gt;人大金仓 KingbaseES
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datasource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver-class-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;com.kingbase8.Driver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:kingbase8://192.168.1.100:54321/proddb?currentSchema=public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;xxx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hikari&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maximum-pool-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minimum-idle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;idle-timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;300000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-lifetime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1200000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection-test-query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SELECT 1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dataSourceProperties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;socketTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tcpKeepAlive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;人大金仓的关键注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;必须开启 &lt;code&gt;tcpKeepAlive&lt;/code&gt;&lt;/strong&gt;。人大金仓在长时间空闲连接上可能出现&amp;quot;静默断连&amp;quot;——TCP 连接已经被中间网络设备（防火墙/负载均衡）断开了，但应用层不知道。开启 TCP Keep-Alive 可以避免这个问题。&lt;/p&gt;
&lt;p&gt;❌ &lt;strong&gt;连接池大小需要保守设置&lt;/strong&gt;。人大金仓的单连接内存开销比 PostgreSQL 大（大约多 30-50%），连接数太多会导致数据库端内存压力大。建议 &lt;code&gt;maximum-pool-size&lt;/code&gt; 不要超过数据库 &lt;code&gt;max_connections&lt;/code&gt; 的 70%。&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;驱动版本要匹配&lt;/strong&gt;。人大金仓的 JDBC 驱动跟数据库版本强绑定，V8R3 的驱动连 V8R6 的数据库可能出奇怪的兼容性问题。务必确保驱动版本和数据库版本一致。&lt;/p&gt;
&lt;h2 id="连接池大小怎么定"&gt;&lt;a href="#%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%a4%a7%e5%b0%8f%e6%80%8e%e4%b9%88%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;连接池大小怎么定
&lt;/h2&gt;&lt;p&gt;一个经典的公式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;连接数 = ((核心数 * 2) + 有效磁盘数)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这是 PostgreSQL 社区推荐的经验公式，对国产数据库也适用。但实际操作中需要考虑更多因素：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;因素&lt;/th&gt;
&lt;th&gt;建议&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数据库最大连接数&lt;/td&gt;
&lt;td&gt;连接池总和不超过 &lt;code&gt;max_connections&lt;/code&gt; 的 80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;应用实例数&lt;/td&gt;
&lt;td&gt;每个实例的连接池 = 数据库最大连接数 / 实例数 × 0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;事务型应用&lt;/td&gt;
&lt;td&gt;连接数 = CPU 核心数 × 2（短事务为主）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分析型应用&lt;/td&gt;
&lt;td&gt;连接数 = CPU 核心数（长查询为主）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;混合负载&lt;/td&gt;
&lt;td&gt;连接数 = CPU 核心数 × 4，配合读写分离&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际案例：一个 8 核 32G 的达梦数据库，部署了 4 个应用实例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;达梦 max_connections = 500（默认）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;可用连接 = 500 × 80% = 400
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每实例连接 = 400 / 4 = 100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;但 8 核 × 2 = 16 就够了
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;最终设置：maximum-pool-size = 20（留余量）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;宁少勿多&lt;/strong&gt;。连接数太多不但不会提升性能，反而会因为上下文切换和资源竞争导致性能下降。&lt;/p&gt;
&lt;h2 id="超时参数最容易被忽略的配置"&gt;&lt;a href="#%e8%b6%85%e6%97%b6%e5%8f%82%e6%95%b0%e6%9c%80%e5%ae%b9%e6%98%93%e8%a2%ab%e5%bf%bd%e7%95%a5%e7%9a%84%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;超时参数：最容易被忽略的配置
&lt;/h2&gt;&lt;p&gt;连接池配置里，超时参数是最容易被忽略但影响最大的。三款数据库的默认超时行为差异很大：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;超时参数&lt;/th&gt;
&lt;th&gt;达梦 DM8&lt;/th&gt;
&lt;th&gt;GaussDB&lt;/th&gt;
&lt;th&gt;人大金仓&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;连接建立超时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;无默认值（可能无限等待）&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;查询超时（socketTimeout）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;会话空闲超时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600 秒&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;事务超时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;td&gt;无默认值&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;三条铁律：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;永远设置 &lt;code&gt;connectionTimeout&lt;/code&gt;&lt;/strong&gt;：连接建立超时，建议 10-30 秒。不设的话，数据库不可达时应用线程会一直阻塞。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;永远设置 &lt;code&gt;socketTimeout&lt;/code&gt;&lt;/strong&gt;：查询超时，建议 60 秒（OLTP 场景）。不设的话，一个慢查询可以阻塞连接几十分钟，直到连接池耗尽。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;max-lifetime&lt;/code&gt; &amp;lt; 数据库会话超时&lt;/strong&gt;：确保连接池主动回收连接，而不是等数据库端关闭。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="连接泄露检测"&gt;&lt;a href="#%e8%bf%9e%e6%8e%a5%e6%b3%84%e9%9c%b2%e6%a3%80%e6%b5%8b" class="header-anchor"&gt;&lt;/a&gt;连接泄露检测
&lt;/h2&gt;&lt;p&gt;HikariCP 有一个非常好用的参数：&lt;code&gt;leak-detection-threshold&lt;/code&gt;。当连接被借出超过指定时间没有归还时，打印警告日志：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hikari&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;leak-detection-threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 60 秒未归还则告警&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个参数在信创项目中特别有用。因为国产数据库的 SQL 执行性能跟 MySQL/Oracle 可能有差异，某些 SQL 在国产数据库上执行时间明显变长，导致连接占用时间增加。通过泄露检测可以快速定位这些问题 SQL。&lt;/p&gt;
&lt;h2 id="mybatis-plus-方言配置"&gt;&lt;a href="#mybatis-plus-%e6%96%b9%e8%a8%80%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;MyBatis-Plus 方言配置
&lt;/h2&gt;&lt;p&gt;连接池配好了，ORM 框架的方言也得对：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;数据库&lt;/th&gt;
&lt;th&gt;MyBatis-Plus 方言&lt;/th&gt;
&lt;th&gt;配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;达梦&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DbType.DM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paginationInterceptor.setDbType(DbType.DM)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GaussDB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DbType.GAUSSDB&lt;/code&gt; 或 &lt;code&gt;DbType.POSTGRE_SQL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;新版 MP 支持 GAUSSDB，旧版用 PG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人大金仓&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DbType.KINGBASE_ES&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paginationInterceptor.setDbType(DbType.KINGBASE_ES)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;注意：如果用 MyBatis-Plus 的自动填充、乐观锁等高级功能，不同方言的实现可能有差异。比如达梦的自增主键用的是 &lt;code&gt;IDENTITY&lt;/code&gt; 语法（类似 SQL Server），而 GaussDB 和人大金仓用的是 &lt;code&gt;SERIAL&lt;/code&gt;（PostgreSQL 风格）。&lt;/p&gt;
&lt;h2 id="监控和告警"&gt;&lt;a href="#%e7%9b%91%e6%8e%a7%e5%92%8c%e5%91%8a%e8%ad%a6" class="header-anchor"&gt;&lt;/a&gt;监控和告警
&lt;/h2&gt;&lt;p&gt;连接池的监控指标是运维的生命线。三款数据库都支持通过 JMX 暴露 HikariCP 指标，关键监控项：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指标&lt;/th&gt;
&lt;th&gt;告警阈值&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;activeConnections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; poolSize × 80%&lt;/td&gt;
&lt;td&gt;活跃连接接近上限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;idleConnections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt; 2&lt;/td&gt;
&lt;td&gt;几乎没有空闲连接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pendingThreads&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 0&lt;/td&gt;
&lt;td&gt;有线程在排队等连接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;connectionTimeout&lt;/code&gt; 次数&lt;/td&gt;
&lt;td&gt;&amp;gt; 0&lt;/td&gt;
&lt;td&gt;获取连接超时（严重问题）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;totalConnections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;持续下降&lt;/td&gt;
&lt;td&gt;连接在异常关闭&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;配合 Prometheus + Grafana，可以做出连接池使用率大盘。在信创项目中，建议在上线前就跑一轮压测，观察连接池在峰值流量下的表现。&lt;/p&gt;
&lt;h2 id="写在最后"&gt;&lt;a href="#%e5%86%99%e5%9c%a8%e6%9c%80%e5%90%8e" class="header-anchor"&gt;&lt;/a&gt;写在最后
&lt;/h2&gt;&lt;p&gt;国产数据库替代是一个系统工程，连接池配置只是其中一环。但就是这一环，如果不注意细节，也能让上线后的系统频繁出问题。&lt;/p&gt;
&lt;p&gt;核心经验：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不要假设国产数据库跟 MySQL/Oracle 行为一致&lt;/strong&gt;。每个数据库都有自己的&amp;quot;脾气&amp;quot;，一定要看官方文档。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;超时参数必须设置&lt;/strong&gt;。连接超时、查询超时、会话超时——一个都不能漏。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接数宁少勿多&lt;/strong&gt;。不要想当然地设一个大数，根据公式算、根据压测调。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;驱动版本要跟数据库版本匹配&lt;/strong&gt;。尤其是人大金仓，驱动和数据库版本不一致会出奇怪的问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上线前必须压测&lt;/strong&gt;。至少跑一轮 30 分钟的持续压测，观察连接池指标是否稳定。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;信创替代的成败不在于&amp;quot;能不能跑起来&amp;quot;，而在于&amp;quot;能不能稳定地跑&amp;quot;。连接池配置虽然不起眼，但它决定了应用和数据库之间的每一滴&amp;quot;血液&amp;quot;能不能顺畅流通。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>