Java應用實踐
更新時間 2025-01-25 10:10:09
最近更新時間: 2025-01-25 10:10:09
分享文章
本頁主要介紹了 JDBC、連接池和數據庫訪問框架。
通常 Java 應用中和數據庫相關的常用組件有:
- JDBC API 及實現:Java 應用通常使用 JDBC (Java Database Connectivity) 來訪問數據庫。JDBC 定義了訪問數據庫 API,而 JDBC 實現完成標準 API 到 MySQL 協議的轉換,常見的 JDBC 實現是 MySQL Connector/J,此外有些用戶可能使用 MariaDB Connector/J。
- 數據庫連接池:為了避免每次創建連接,通常應用會選擇使用數據庫連接池來復用連接,JDBC DataSource 定義了連接池 API,開發者可根據實際需求選擇使用某種開源連接池實現。
- 數據訪問框架:應用通常選擇通過數據訪問框架 (MyBatis, Hibernate) 的封裝來進一步簡化和管理數據庫訪問操作。
JDBC
- 為避免重復解析和生成 SQL 執行計劃的開銷,注意選擇使用 Prepare API,并且需要在 JDBC 連接參數中配置 useServerPrepStmts = true。
- 對于批量插入更新,如果插入記錄較多,可以選擇使用 addBatch/executeBatch API。通過 addBatch 的方式將多條 SQL 的插入更新記錄先緩存在客戶端,然后在 executeBatch 時一起發送到數據庫服務器,如果希望 Batch 網絡發送,需要在 JDBC 連接參數中配置 rewriteBatchedStatements = true。
- 在查詢返回超大結果集的場景中,推薦設置 FetchSize為Integer.MIN_VALUE讓客戶端不緩存,客戶端通過 StreamingResult 的方式從網絡連接上流式讀取執行結果。使用流式讀取數據時,需要將resultset讀取完成或 close 后,才能繼續使用該語句進行下次查詢,否則會報錯。如果需要在resultset讀取完成或 close 前進行查詢避免報錯,可在 URL 中添加配置參數clobberStreamingResults=true,這樣會自動 close resultset,但之前流式查詢未被讀取的結果集會丟失。
連接池
- 應用側可以通過 maximumPoolSize配置連接池最大連接數,可以通過minimumIdle配置連接池最小空閑連接數,需要根據自身情況配置合適的連接池大小。
- 分布式數據庫HTAP 默認不會主動關閉客戶端連接(除非報錯),但是也需要探活連接,可以在每次使用連接前檢查連接是否可用,或者定期發送 test query 保活連接等方式進行探活。
數據庫訪問框架
- 可以使用目前比較流行MyBatis數據訪問框架管理 SQL 并完成結果集和 Java 對象的來回映射工作。
- 如果希望從MyBatis中讀取超大結果集合時可以使用帶 ResultHandler的查詢接口來避免一次獲取整個結果集,或者使用Cursor 類來進行流式讀取等。