如果是单数据源我就不多说了,直接在实现接口的具体的方法上@Transactional
//单数据源
@Transactional(rollbackFor = Exception.class)
@Override
public int insertSelective(CheckInOut record) {
return checkInOutMapper.insertSelective(record);
}
多数据源的话,就有坑了。如果使用try{}catch{}自定义捕获异常那么要在实现的方法上,指定需要回退的数据源,不然不知道需要回退哪个数据源,例外需要TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()进行回退
//多数据源
@Transactional(rollbackFor = Exception.class,transactionManager = "firstransactionManager")
public int insertSelective(CheckInOut record) {
int count=0;
try{
count=checkInOutMapper.insertSelective(record)
}catch(NullPointerException e){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return count;
}
持续更新!