可查的例外(checked exceptions):Exception下除了RuntimeException外的異常
#不可查的例外(unchecked exceptions):RuntimeException及其子類別與錯誤(Error)
#屬性 | 類型 | 描述 |
---|---|---|
value | String | ##可選的限定描述符,指定使用的交易管理器|
enum: Propagation | 可選的交易傳播行為設定 | |
enum: Isolation | 可選的交易隔離等級設定 | |
boolean | 讀寫或只讀事務,預設讀寫 | |
int (in seconds granularity) | 交易逾時時間設定 | |
Class物件數組,必須繼承自Throwable | 導致交易回滾的例外類別數組 | |
類別名稱數組,必須繼承自Throwable | 導致交易回滾的例外類別名字數組 | |
Class物件數組,必須繼承自Throwable | 不會導致事務回滾的異常類別數組 | |
類別名稱數組,必須繼承自Throwable | 不會導致事務回滾的異常類別名字數 |
拋出運行時異常和unchecked exceptions時才會交易回滾。也就是說,當拋出一個RuntimeException 或其子類別例的實例時,從事務方法中拋出的Checked exceptions將不會被標識進行事務回滾。
@Transactional(rollbackOn=Exception.class)
@Transactional(dontRollbackOn=RunTimeException.class)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
#注意:
try{}catch{throw Exception}。
@Slf4j @Service public class MemberService { @Autowired private MemberMapper memberMapper; @Transactional public Integer insert(MemberEntity memberEntity) { Integer insertResult = 0; try { insertResult = memberMapper.save(memberEntity); log.info("insertResult:{}", insertResult); int result = 1 / memberEntity.getAge(); } catch (Exception e) { log.error("errorMsg:{}", e.getMessage()); //回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return insertResult; } }
以上是怎麼使用Java @Transactional指定回滾條件的詳細內容。更多資訊請關注PHP中文網其他相關文章!