雖然 Hibernate、MyBatis 等 ORM 框架大幅簡化了資料存取開發,但在極致效能場景下,原生 JDBC 仍具不可替代的優勢——它提供最底層、最精細的控制權。以下是實戰中驗證有效的十大優化策略:
Type 4 驅動(如 MySQL Connector/J、PostgreSQL JDBC)直接以 TCP/IP 與資料庫通訊,無需本地庫,部署簡單且效能最佳。
採用 HikariCP、Druid 等成熟連線池。參數配置必須以壓測為準,而非憑感覺:
maximumPoolSize:依 CPU 核心數與 I/O 特性設定connectionTimeout、idleTimeout、maxLifetime:平衡資源釋放與重建開銷在同一業務流程中,儘量複用單一連線。頻繁獲取/歸還連線會增加池管理開銷,尤其在大迴圈批次操作時更應避免「用完即關」模式。
static final 常數PreparedStatement 物件(需注意執行緒安全)大量 INSERT/UPDATE/DELETE 時使用 addBatch() + executeBatch(),可將網路往返次數降為 1 次,效能提升往往達數量級。
根據業務需求精確選擇:
| 類型 | 適用場景 | 資源消耗 |
|---|---|---|
TYPE_FORWARD_ONLY + CONCUR_READ_ONLY | 單向讀取、不需更新(最常見) | 最低 |
TYPE_SCROLL_INSENSITIVE + CONCUR_READ_ONLY | 需反向/隨機讀取、不需即時見他人修改 | 中等 |
TYPE_SCROLL_SENSITIVE + CONCUR_UPDATABLE | 需即時見變更、支援游標更新 | 最高 |
此外,務必使用 setFetchSize() 控制每次網路傳輸行數,避免大結果集導致 OOM。
readOnly=true,資料庫可優化鎖策略Connection conn = null;
try {
conn = pool.getConnection();
// 業務邏輯
} finally {
if (conn != null) conn.close(); // 歸還池或關閉
}
防止異常導致連線洩漏耗盡池資源。
SQLException,轉換為受檢異常或自定義業務異常拋出RuntimeException 導致 JVM 不可控終止當單機 JDBC 優化觸及瓶頸時,引入:
記住:優化是權衡的藝術,永遠以實測數據為準,避免過早優化。