话不多说,上代码
@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时我发现,更新语句正常,但是有两个更新语句,这个时候我就很奇怪了,为什么有两个呢?然后想了想,这是监听事件,那肯定就是监听结束后,又执行了更新操作,那次更新操作的数据是监听更新前的老数据,所以导致了数据没有变化。
但是实际上监听事件的更新操作是成功了的。只不过在监听后又把老数据进行更新,导致了某个数据没有发生变化。所以要吸取经验,不要犯跟我一样的错啊!!!!!!!!!
博主在Java监听事件中更新信息未成功。先排查是否因bean未加载,发现查询操作正常,排除该原因;又怀疑事务未提交,添加事务后更新仍失败。最后用p6spy打印sql,发现有两条更新语句,原来是监听结束后又用老数据更新,导致数据未变。
288

被折叠的 条评论
为什么被折叠?



