1、前段时间在维护项目的时候碰到一个问题,具体业务就是更新已有角色的资源,数据库已更新,但是权限控制不起效果,还是保留原来的权限。
2、排查发现原有的代码在一个service方法里有进行资源权限表的更新,然后再调用另外一个方法通过线程池通知其他业务系统权限已更新。
3、这个问题涉及到在一个service,开启另外一个线程的问题,那么这个线程和service是否处于同一个事务呢?具体代码大致如下。
(1)
public void update(SysRole role) {
SysRole db=roleDao.update(role);
notifyOtherSystem();
}
(2)
public void notifyAllSubSystem() {
pool.getThreadPool().execute(new OtherSystem(url));
}
由于notifyOtherSystem中的事务和update不属于同一事务导致没有获取到最新的数据。