Spring 的@Transactional 註解提供了兩個關鍵參數:隔離和傳播,以自訂事務行為。讓我們深入研究這些參數並探討它們在現實場景中的意義。
傳播定義事務之間的關係。最常見的選項包括:
通常,REQUIRED 適用於大多數場景。然而,當確保事務的完全隔離至關重要時,REQUIRES_NEW 是合適的。
隔離透過指定交易如何相互互動來確保資料完整性。關鍵選項包括:
更嚴格的隔離等級(例如,SERIALIZABLE)的缺點是會降低多執行緒應用程式的效能。因此,建議根據應用程式的需求仔細考慮權衡。
防止髒讀造成的資料衝突:
當執行緒1 將數值寫入資料庫行,然後回溯事務,將舊值保留在資料庫中時,就會發生髒讀的典型範例。如果執行緒 2 同時讀取該行,它將看到(現在不正確的)舊值。為了防止這種不一致,我們可以使用 ISOLATION_READ_COMMITTED。
強制事務隔離:
REQUIRES_NEW 傳播的實際應用是在服務方法中,該方法應該始終以完全的方式執行孤立的交易。考慮以下方法:
<code class="java">@Transactional(propagation=Propagation.REQUIRES_NEW) public void provideService() { repo1.retrieveFoo(); repo2.retrieveFoo(); }</code>
此方法可確保對儲存庫 repo1 和 repo2 所做的任何變更與其他交易隔離,防止潛在的干擾並保持資料一致性。
以上是Spring @Transactional 中的隔離和傳播參數如何塑造事務行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!