方式一:service的public方法上面加上@Transactional(rollbackFor = Exception.class), 默認只有非檢測性異常才生效-RuntimeException ,controller直接加上加入Transactional不會產生回滾,需要進行手動回滾操作
@RequestMapping("/transactionalTest")
@Transactional(rollbackFor=Exception.class)
public String transactionalTest() {
try {
funMapper.update(entity);
fun2Mapper.update(entity2);
}catch(Exception e) {
logger.error( e.getMessage(),e );
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();// 執行2個操作進行手動回滾操作,必須這樣才能回滾
}
}
方式二: 手動創建事務,controller類下面添加註解DataSourceTransactionManager
//可以通過註解實現
@Autowired
private DataSourceTransactionManager txManager;
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔離級別,開啓新事務
TransactionStatus status = txManager.getTransaction(def); // 獲得事務狀態
try{
//邏輯代碼,可以寫上你的邏輯處理代碼
txManager.commit(status);
}catch(Exception e){
// logger.error( e.getMessage(),e );
txManager.rollback(status);//執行2個操作進行手動回滾操作
}