问题:在一个方法中部分代码需要后置执行,但是整个方法添加了事务,这个时候我们就需要用到事务同步器了。
解决代码:
@Override @Transactional(rollbackFor = Exception.class) public void updateCarSpace(BaseCarSpace baseCarSpace) { this.checkCarSpace(baseCarSpace); BaseCarSpace old = baseCarSpaceMapper.selectById(baseCarSpace.getId()); Integer operate; if (old.getSpaceNumber() < baseCarSpace.getSpaceNumber()) { operate = 1; } else if (old.getSpaceNumber() > baseCarSpace.getSpaceNumber()) { operate = -1; } else { operate = 0; } int updateNum = baseCarSpaceMapper.updateById(baseCarSpace); try { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCommit() { synXcxQueue(baseCarSpace, operate, updateNum); } }); } catch (Exception e) { log.info("同步小程序车位数问题出错",e.getMessage()); } }
我这里添加的是事务提交后后置执行,做一次记录。