话不多说,上代码
@EventListener
public void overEvent(OverTask overTask){
log.info("查看数据="+overTask.getBusinessKey());
Class aClass = getMap().get(overTask.getProcessName());;
if(Objects.nonNull(aClass)){
Long businessKeyId = Long.valueOf(overTask.getBusinessKey());
IService service1 = (IService) SpringUtils.getBean(aClass);
if(service1 instanceof GwfwFwlbService ){
SpringUtils.getBean(GwfwFwlbService.class).
update(Wrappers.lambdaUpdate(GwfwFwlb.class).
set(GwfwFwlb::getStatus,FlowApprovalType.OVER).
eq(GwfwFwlb::getId,businessKeyId));
}
//。。。。。。。。。。。。
}
else {
log.error("流程回调信息异常---->{}",overTask.toString());
}
}
}
在一次监听事件当中,对某个信息进行了更新(set(GwfwFwlb::getStatus,FlowApprovalType.OVER)),但是结果却发现并没有更新成功。这个时候我就感到疑惑
首先我是觉得,是不是bean没有加载进来,导致所有操作都不行,然后我打印日志,发现查询等操作是正常的,说明是bean加载了,并且并没有销毁掉。
然后我就觉得,是不是事务没有提交的原因,然后我加上了事务(@Transactional(rollbackFor = Exception.class)),再次执行,发现更新操作依旧没有成功,这个时候我就很奇怪了,为什么只有更新操作没有成功呢,因为更新数据打印出来是更改了的,但是数据库显示数据依旧没有变化。
没办法,只能使用大招了,添加p6spy看看sql
此处省略N个字..............................
打印sql时我发现,更新语句正常,但是有两个更新语句,这个时候我就很奇怪了,为什么有两个呢?然后想了想,这是监听事件,那肯定就是监听结束后,又执行了更新操作,那次更新操作的数据是监听更新前的老数据,所以导致了数据没有变化。
但是实际上监听事件的更新操作是成功了的。只不过在监听后又把老数据进行更新,导致了某个数据没有发生变化。所以要吸取经验,不要犯跟我一样的错啊!!!!!!!!!