網(wǎng)站權(quán)重能帶來(lái)什么作用百度一下瀏覽器
1. 事務(wù)隔離級(jí)別(Isolation Level)
事務(wù)隔離級(jí)別定義了事務(wù)在并發(fā)環(huán)境下的行為,主要解決以下問(wèn)題:
臟讀(Dirty Read):一個(gè)事務(wù)讀取了另一個(gè)未提交事務(wù)的數(shù)據(jù)。
不可重復(fù)讀(Non-Repeatable Read):一個(gè)事務(wù)在多次讀取同一數(shù)據(jù)時(shí),結(jié)果不一致。
幻讀(Phantom Read):一個(gè)事務(wù)在多次查詢時(shí),結(jié)果集不一致(新增或刪除了數(shù)據(jù))。
Spring 支持以下五種隔離級(jí)別:
DEFAULT:
使用底層數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別。
通常是 READ_COMMITTED。
READ_UNCOMMITTED:
最低的隔離級(jí)別,允許臟讀、不可重復(fù)讀和幻讀。
適用于對(duì)數(shù)據(jù)一致性要求不高的場(chǎng)景。
READ_COMMITTED:
防止臟讀,但允許不可重復(fù)讀和幻讀。
大多數(shù)數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別。
REPEATABLE_READ:
防止臟讀和不可重復(fù)讀,但允許幻讀。
適用于需要保證同一事務(wù)中多次讀取數(shù)據(jù)一致的場(chǎng)景。
SERIALIZABLE:
最高的隔離級(jí)別,防止臟讀、不可重復(fù)讀和幻讀。
通過(guò)完全鎖定數(shù)據(jù)來(lái)實(shí)現(xiàn),性能最差,適用于對(duì)數(shù)據(jù)一致性要求極高的場(chǎng)景。
在 Spring 中,可以通過(guò) @Transactional 注解的 isolation 屬性來(lái)設(shè)置隔離級(jí)別:
@Transactional(isolation = Isolation.READ_COMMITTED)
public void someMethod() {// 業(yè)務(wù)邏輯
}
2. 事務(wù)傳播行為(Propagation Behavior)
事務(wù)傳播行為定義了事務(wù)方法在調(diào)用其他事務(wù)方法時(shí)的行為。Spring 提供了七種傳播行為:
REQUIRED(默認(rèn)):
如果當(dāng)前存在事務(wù),則加入該事務(wù);如果不存在,則創(chuàng)建一個(gè)新事務(wù)。
適用于大多數(shù)場(chǎng)景。
REQUIRES_NEW:
總是創(chuàng)建一個(gè)新事務(wù),如果當(dāng)前存在事務(wù),則掛起當(dāng)前事務(wù)。
適用于需要獨(dú)立事務(wù)的場(chǎng)景。
SUPPORTS:
如果當(dāng)前存在事務(wù),則加入該事務(wù);如果不存在,則以非事務(wù)方式執(zhí)行。
適用于不需要強(qiáng)制事務(wù)的場(chǎng)景。
NOT_SUPPORTED:
以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則掛起當(dāng)前事務(wù)。
適用于不需要事務(wù)支持的場(chǎng)景。
MANDATORY:
如果當(dāng)前存在事務(wù),則加入該事務(wù);如果不存在,則拋出異常。
適用于必須在一個(gè)已有事務(wù)中執(zhí)行的場(chǎng)景。
NEVER:
以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
適用于絕對(duì)不能有事務(wù)的場(chǎng)景。
NESTED:
如果當(dāng)前存在事務(wù),則在嵌套事務(wù)中執(zhí)行;如果不存在,則創(chuàng)建一個(gè)新事務(wù)。
嵌套事務(wù)可以獨(dú)立提交或回滾,但外部事務(wù)回滾時(shí),嵌套事務(wù)也會(huì)回滾。
在 Spring 中,可以通過(guò) @Transactional 注解的 propagation 屬性來(lái)設(shè)置傳播行為:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void someMethod() {// 業(yè)務(wù)邏輯
}
3. 總結(jié)
隔離級(jí)別:控制事務(wù)在并發(fā)環(huán)境下的數(shù)據(jù)可見(jiàn)性,解決臟讀、不可重復(fù)讀和幻讀問(wèn)題。
傳播行為:控制事務(wù)方法之間的調(diào)用行為,決定事務(wù)的創(chuàng)建、加入或掛起。
通過(guò)合理配置隔離級(jí)別和傳播行為,可以確保應(yīng)用程序在并發(fā)環(huán)境下保持?jǐn)?shù)據(jù)的一致性和完整性。