JDBC URL 是 Java 應用與 MySQL 連線的「護照」,參數配置直接影響穩定性、效能與資料正確性。本文系統梳理 URL 結構、兩大驅動類別、核心參數詳解、連線池優化組合、XML 轉義陷阱與版本演進差異。
| 驅動來源 | 類別名 | 備註 |
|---|---|---|
| MySQL 官方 (Connector/J) | com.mysql.cj.jdbc.Driver (8.0+) / com.mysql.jdbc.Driver (5.1) |
主流標準,積極維護 |
| MM.MySQL (舊版) | org.gjt.mm.mysql.Driver |
已停止更新,僅維護舊系統 |
jdbc:mysql://[host:port],[host:port].../[database]?[param1=value1¶m2=value2...]
# 多主機支援(Connector/J 5.1+ 支援負載均衡/故障轉移)
jdbc:mysql://host1:3306,host2:3306/mydb?loadBalanceStrategy=bestResponseTime
| 參數 | 說明 | 預設值 | 建議值/場景 |
|---|---|---|---|
user |
資料庫用戶名 | 無 | 必填 |
password |
用戶密碼 | 無 | 必填(生產環境建議外部化配置) |
useUnicode |
是否使用 Unicode 字符集 | false | true(配合 characterEncoding) |
characterEncoding |
字符編碼(需 useUnicode=true) | false | utf8mb4 (8.0+) / utf8 (5.1) / gbk |
autoReconnect |
連線中斷自動重連 | false | true(非連線池環境) |
autoReconnectForPools |
連線池專用重連策略 | false | true(連線池環境必開) |
failOverReadOnly |
重連成功後是否唯讀 | true | false(主庫重連需讀寫) |
maxReconnects |
最大重試次數 (autoReconnect=true) | 3 | 視網路穩定性調整,如 10 |
initialTimeout |
重試間隔秒數 | 2 | 2-5 秒 |
connectTimeout |
建立 Socket 連線超時 (毫秒) | 0 (不超時) | 10000 (10 秒),防止啟動卡死 |
socketTimeout |
Socket 讀寫超時 (毫秒) | 0 (不超時) | 30000 (30 秒),配合查詢超時 |
useSSL |
是否使用 SSL 連線 | true (5.1.38+) | false (內網) / true + 配置憑證 (外網) |
serverTimezone |
伺服器時區 (8.0+ 必填) | 無 | Asia/Taipei, UTC, GMT+8 |
allowPublicKeyRetrieval |
允許獲取 RSA 公鑰 (8.0+ caching_sha2_password) | false | true (未配置 SSL 時) |
rewriteBatchedStatements |
批次語句重寫優化 (批次 INSERT 效能提升 10 倍+) | false | true (高寫入場景必開) |
jdbc:mysql://localhost:3306/mydb?
user=root&
password=secret&
useUnicode=true&
characterEncoding=utf8mb4&
autoReconnect=true&
failOverReadOnly=false&
serverTimezone=Asia/Taipei&
useSSL=false
jdbc:mysql://localhost:3306/mydb?
user=root&
password=secret&
useUnicode=true&
characterEncoding=utf8mb4&
autoReconnectForPools=true&
failOverReadOnly=false&
serverTimezone=Asia/Taipei&
useSSL=false&
rewriteBatchedStatements=true&
connectionInitSql=SET NAMES utf8mb4
在 server.xml、context.xml、druid.properties 等 XML/屬性文件中,& 必須轉義為 &:
| 特性 | Connector/J 5.1 | Connector/J 8.0+ |
|---|---|---|
| 驅動類別 | com.mysql.jdbc.Driver | com.mysql.cj.jdbc.Driver |
| utf8mb4 支援 | 5.1.47+ 部分支援 | 原生完整支援 |
| 時區參數 | 不支援 serverTimezone | 必須指定 serverTimezone |
| 認證插件 | mysql_native_password | caching_sha2_password (預設) |
| SSL 預設 | false | true (需配置或關閉) |
現象:Communications link failure、MySQLNonTransientConnectionException
根因:MySQL 預設 wait_timeout=28800 (8 小時) 切斷空閒連線,連線池未驗證/回收失效連線。
解決:
testWhileIdle=true、timeBetweenEvictionRunsMillis=30000、minEvictableIdleTimeMillis=300000validationQuery=SELECT 1 (5.1) / validationQuery=SELECT 1 (8.0)autoReconnectForPools=true&failOverReadOnly=falsewait_timeout (如 86400),但治本在連線池端JDBC URL 參數看似瑣碎,實則是連線穩定性、效能與資料正確性的「第一道防線」。標準化模板化管理,版本升級同步檢核,是成熟 Java 團隊的基礎建設標誌。