问题:在一个方法中部分代码需要后置执行,但是整个方法添加了事务,这个时候我们就需要用到事务同步器了。
解决代码:
@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());
}
}
我这里添加的是事务提交后后置执行,做一次记录。