[Java][Spring][Database] 主流事務操作 @Transactional & TransactionTemplate

Intro 在 Spring 專案開發中,@Transactional 註解因其高易用性,成為處理資料庫事務(Transaction)的首選方式。 然而,在處理批次資料寫入(Bulk Insert/Update)、大批次資料對帳或長流程業務邏輯時,若習慣性地在方法(Method)層級套用 @Transactional,容易引發「長事務(Long Transaction)」,對資料庫與系統穩定性帶來嚴重隱患: 資料庫鎖定與超時 (Lock Wait Timeout):長事務會長時間持有資料列鎖或間隙鎖(Gap Lock),導致其他併發的線上請求因無法取得鎖而排隊超時。 Undo Log 膨脹與效能下滑:未 Commit 的事務會阻止 MySQL (InnoDB) 進行 Undo Log 的清理(Purge),導致膨脹的 Undo Log 鏈大幅拖慢全系統的查詢速度。 失敗代價過高:若在處理上萬筆資料的最後一刻發生異常,整個長事務會強制全數回滾(Rollback),導致先前耗費的 CPU 與 I/O 資源完全浪費。 本文旨在釐清 聲明式事務(@Transactional) 與 編程式事務(TransactionTemplate) 的適用場景,並針對批次處理(Chunk / Batch […]

[Java] Java / Spring Boot Web 開發環境與語言架構指南

安裝 | Quick Start | Package套件管理 | Logging | 開發工具 | Spring Boot Web | 部署 | Template Engine | Concurrency | Appendix Intro Java programming language JVM JVM (Java Virtual Machine – Java虛擬機),能夠執行Java位元組碼且以堆疊結構機器實做的虛擬機器。它有自己的硬體架構,如處理器、堆疊、暫存器等,還具有相應的指令系統。 JVM 封鎖了與具體作業系統平台相關的資訊,使得Java程式只需生成在 JVM 上執行的目的碼(位元組碼),就可以在多種平台上執行。通過對中央處理器(CPU)所執行的軟體實作,實現能執行編譯過的Java程式碼 (Applet與應用程式)。 (References: […]