spring中的事務隔離級別
spring中的事務隔離級別有5種。分別是:
1、ISOLATION_DEFAULT
使用數據庫默認的事務隔離級別。
2、ISOLATION_READ_UNCOMMITTED (未提交讀)
這是事務最低的隔離級別,允許讀取尚未提交的修改的數據。
這種隔離級別會產生髒讀,不可重複讀和幻像讀。
3、ISOLATION_READ_COMMITTED (提交讀)
保證一個事務修改的數據提交後才能被另外一個事務讀取。
這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。
4、ISOLATION_REPEATABLE_READ (可重複讀)
對相同字段的多次讀取的結果是一致的,除非數據被當前事務自生修改。
這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。
5、ISOLATION_SERIALIZABLE (序列化)
完全服從acid隔離原則,這是花費最高代價但是最可靠的事務隔離級別。
確保不發生髒讀、不可重複讀、和幻讀,但執行效率最低。
spring中的事務傳播行爲
Spring在TransactionDefinition接口中規定了7種類型的事務傳播行爲,它們規定了事務方法和事務方法發生嵌套調用時事務如何進行傳播,分別是:
1、PROPAGATION_REQUIRED
如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。
2、PROPAGATION_SUPPORTS
支持當前事務,如果當前沒有事務,就以非事務方式執行。
3、PROPAGATION_MANDATORY
使用當前的事務,如果當前沒有事務,就拋出異常。
4、PROPAGATION_REQUIRES_NEW
新建事務,如果當前存在事務,把當前事務掛起。
5、PROPAGATION_NOT_SUPPORTED
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6、PROPAGATION_NEVER
以非事務方式執行,如果當前存在事務,則拋出異常。
7、PROPAGATION_NESTED
如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。