您好,登錄后才能下訂單哦!
在Spring Boot 2中,MyBatis的事務(wù)傳播行為可以通過(guò)配置@Transactional
注解來(lái)實(shí)現(xiàn)。事務(wù)傳播行為定義了一個(gè)方法在事務(wù)上下文中如何與其他方法進(jìn)行交互。Spring提供了7種事務(wù)傳播行為,分別是:
PROPAGATION_REQUIRED(默認(rèn)):如果當(dāng)前沒(méi)有事務(wù),就創(chuàng)建一個(gè)新事務(wù);如果已經(jīng)存在一個(gè)事務(wù)中,則加入到當(dāng)前事務(wù)中。這是最常用的傳播行為。
PROPAGATION_SUPPORTS:如果當(dāng)前有事務(wù),則加入到當(dāng)前事務(wù)中;如果沒(méi)有事務(wù),則以非事務(wù)方式執(zhí)行。適用于可接受事務(wù)管理的業(yè)務(wù)方法,但不想強(qiáng)制使用事務(wù)的場(chǎng)景。
PROPAGATION_MANDATORY:使用當(dāng)前的事務(wù),如果當(dāng)前沒(méi)有事務(wù),則拋出異常。適用于必須在一個(gè)事務(wù)中執(zhí)行的業(yè)務(wù)方法。
PROPAGATION_REQUIRES_NEW:始終創(chuàng)建一個(gè)新事務(wù),如果當(dāng)前有事務(wù),則將當(dāng)前事務(wù)掛起。適用于需要獨(dú)立事務(wù)執(zhí)行的業(yè)務(wù)方法,例如獨(dú)立事務(wù)的嵌套。
PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前有事務(wù),則將當(dāng)前事務(wù)掛起。適用于不需要事務(wù)支持的業(yè)務(wù)方法,例如只讀查詢。
PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前有事務(wù),則拋出異常。適用于不需要事務(wù)支持且必須保證非事務(wù)執(zhí)行的業(yè)務(wù)方法。
PROPAGATION_NESTED:如果當(dāng)前有事務(wù),則創(chuàng)建一個(gè)嵌套事務(wù);如果沒(méi)有事務(wù),則創(chuàng)建一個(gè)新事務(wù)。適用于需要獨(dú)立事務(wù)執(zhí)行,但希望回滾時(shí)只回滾嵌套事務(wù)的場(chǎng)景。
在Spring Boot 2中,可以使用@Transactional
注解來(lái)配置MyBatis的事務(wù)傳播行為。例如:
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyService {
@Autowired
private MyMapper myMapper;
@Transactional(propagation = Propagation.REQUIRED)
public void myMethod() {
// 業(yè)務(wù)邏輯
}
}
在這個(gè)例子中,myMethod
方法使用PROPAGATION_REQUIRED
事務(wù)傳播行為,表示如果當(dāng)前沒(méi)有事務(wù),則創(chuàng)建一個(gè)新事務(wù);如果已經(jīng)存在一個(gè)事務(wù)中,則加入到當(dāng)前事務(wù)中。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。