在service類(lèi)前加上@Transactional,聲明這個(gè)service所有方法需要事務(wù)管理。每一個(gè)業(yè)務(wù)方法開(kāi)始時(shí)都會(huì)打開(kāi)一個(gè)事務(wù)。
Spring默認(rèn)情況下會(huì)對(duì)運(yùn)行期例外(RunTimeException)進(jìn)行事務(wù)回滾。這個(gè)例外是unchecked
如果遇到checked意外就不回滾。
如何改變默認(rèn)規(guī)則:
1 讓checked例外也回滾:在整個(gè)方法前加上 @Transactional(rollbackFor=Exception.class)
2 讓unchecked例外不回滾: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事務(wù)管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意: 如果異常被try{}catch{}了,事務(wù)就不回滾了,如果想讓事務(wù)回滾必須再往外拋try{}catch{throw Exception}。