事務(wù)屬性:
// 當(dāng)前方法應(yīng)用事務(wù)
@Transactional(
readOnly=false, // 讀寫的事務(wù)悠砚,當(dāng)修改數(shù)據(jù)時(shí)候用酝陈;如果查詢就設(shè)置為true
isolation=Isolation.DEFAULT, // 事務(wù)隔離級(jí)別
timeout=-1, // 事務(wù)執(zhí)行的超時(shí)時(shí)間, -1 表示不超時(shí)
noRollbackFor=ArithmeticException.class, // 遇到指定的異常不回滾
propagation=Propagation.REQUIRES_NEW // 事務(wù)傳播行為
)
事務(wù)傳播行為:
REQUIRES_NEW:
如果上下文中已經(jīng)存在事務(wù)A陶耍,則該事務(wù)A掛起犯戏,并啟動(dòng)一個(gè)新的事務(wù)B。 當(dāng)事務(wù)B結(jié)束后娘汞,事務(wù)A被喚醒并繼續(xù)執(zhí)行
REQUIRED:
當(dāng)前執(zhí)行方法必須在事務(wù)環(huán)境下運(yùn)行歹茶!如果調(diào)用當(dāng)前方式時(shí)候已經(jīng)有一個(gè)事務(wù)環(huán)境,當(dāng)前執(zhí)行方法會(huì)加入當(dāng)前事務(wù)環(huán)境,就不開啟新的事務(wù)辆亏;如果調(diào)用當(dāng)前方法時(shí)候沒有事務(wù)環(huán)境,就開啟一個(gè)新的事務(wù)!
SUPPORTS:
支持事務(wù)環(huán)境鳖目! 如果當(dāng)前方法沒有事務(wù)扮叨,也可以運(yùn)行!
Never:
當(dāng)前方法不能再事務(wù)環(huán)境下運(yùn)行领迈!
案例:
插入部門信息彻磁,插入日志(日志)!
- t_log 日志表
- LogService.java 插入記錄
REQUIRES_NEW
insertLog()
不管當(dāng)前執(zhí)行方法有沒有事務(wù)環(huán)境狸捅,都開啟新事務(wù)衷蜓!
- DeptService.java
REQUIRED
Void save() {
// 日志提示: 在插入部門….
insertLog(); // 始終插入
int I = 1/0;
dao.save(); 調(diào)用dao的保存方法
}
講解:
執(zhí)行save方法時(shí)開啟了一個(gè)新的事務(wù)環(huán)境,執(zhí)行到“insertLog();”時(shí)又會(huì)開啟一個(gè)新的事務(wù)環(huán)境尘喝; 當(dāng)上一個(gè)事務(wù)環(huán)境發(fā)生異常時(shí)磁浇,不會(huì)造成新的事務(wù)進(jìn)行回滾;所以無論如何插入日志都會(huì)成功