查询配置不能使用多线程,会导致事务失效

This commit is contained in:
wangxin
2019-07-22 19:03:42 +08:00
parent 3f952f6a83
commit 7afa89951c
2 changed files with 39 additions and 91 deletions

View File

@@ -3387,43 +3387,10 @@ public abstract class BaseService {
cfgIndexInfo.setUserRegion(userRgionMap); cfgIndexInfo.setUserRegion(userRgionMap);
String oldCommonGroupIds=cfgIndexInfo.getCommonGroupIds(); String oldCommonGroupIds=cfgIndexInfo.getCommonGroupIds();
//将所有要从配置中删除的组从配置中删除 //将所有要从配置中删除的组从配置中删除
IpCommCfg ipCommCfg=(IpCommCfg)this.processUserRegionMap(userRgionMap,"ipGroup",ipDeletedGroups,cfgIndexInfo,ipCommGroupCfgDao,IpCommCfg.class); this.processUserRegionMap(userRgionMap,"ipGroup",ipDeletedGroups,cfgIndexInfo,ipCommGroupCfgDao,IpCommCfg.class);
UrlCommCfg urlCommCfg=(UrlCommCfg)this.processUserRegionMap(userRgionMap,"urlGroup",urlDeletedGroups,cfgIndexInfo,urlCommGroupCfgDao,UrlCommCfg.class); this.processUserRegionMap(userRgionMap,"urlGroup",urlDeletedGroups,cfgIndexInfo,urlCommGroupCfgDao,UrlCommCfg.class);
ScriberIdCommCfg scriberIdCommCfg=(ScriberIdCommCfg)this.processUserRegionMap(userRgionMap,"subscribeIdGroup",subIdDeletedGroups,cfgIndexInfo,scriberIdCommGroupDao,ScriberIdCommCfg.class); this.processUserRegionMap(userRgionMap,"subscribeIdGroup",subIdDeletedGroups,cfgIndexInfo,scriberIdCommGroupDao,ScriberIdCommCfg.class);
DomainCommCfg domainCommCfg=(DomainCommCfg)this.processUserRegionMap(userRgionMap,"domainGroup",domainDeletedGroups,cfgIndexInfo,domainCommGroupDao,DomainCommCfg.class); this.processUserRegionMap(userRgionMap,"domainGroup",domainDeletedGroups,cfgIndexInfo,domainCommGroupDao,DomainCommCfg.class);
ExecutorService executorService= Executors.newFixedThreadPool(4);
Future<List<IpCommCfg>> ipCommCfgF= executorService.submit(new ProcessUserRegionMapThread<IpCommCfg>(ipCommCfg,ipCommGroupCfgDao));
Future<List<UrlCommCfg>> urlCommCfgF=executorService.submit(new ProcessUserRegionMapThread<UrlCommCfg>(urlCommCfg,urlCommGroupCfgDao));
Future<List<ScriberIdCommCfg>> scriberIdCommCfgF=executorService.submit(new ProcessUserRegionMapThread<ScriberIdCommCfg>(scriberIdCommCfg,scriberIdCommGroupDao));
Future<List<DomainCommCfg>> domainCommCfgF=executorService.submit(new ProcessUserRegionMapThread<DomainCommCfg>(domainCommCfg,domainCommGroupDao));
executorService.shutdown();
while(!executorService.isTerminated()){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
logger.error("error occured while sleeping",e);
}
}
try {
List<IpCommCfg> ipCommCfgList=ipCommCfgF.get();
if(CollectionUtils.isNotEmpty(ipCommCfgList)){
cfgIndexInfo.setIpCommGroupCfgList(ipCommCfgList);
}
List<UrlCommCfg> urlCommCfgList=urlCommCfgF.get();
if(CollectionUtils.isNotEmpty(urlCommCfgList)){
cfgIndexInfo.setUrlCommGroupList(urlCommCfgList);
}
List<ScriberIdCommCfg> scriberIdCommCfgList=scriberIdCommCfgF.get();
if(CollectionUtils.isNotEmpty(scriberIdCommCfgList)){
cfgIndexInfo.setScriberIdCommGroupList(scriberIdCommCfgList);
}
List<DomainCommCfg> domainCommCfgList=domainCommCfgF.get();
if(CollectionUtils.isNotEmpty(domainCommCfgList)){
cfgIndexInfo.setDomainCommGroupList(domainCommCfgList);
}
} catch (InterruptedException |ExecutionException e) {
logger.error("error occured while future get",e);
}
//需要更新的组,组可能增加了,可能减少了,也有可能清空了(所有的域全删了) //需要更新的组,组可能增加了,可能减少了,也有可能清空了(所有的域全删了)
cfgIndexInfo.setCommonGroupIds(gsonToJson(userRgionMap)); cfgIndexInfo.setCommonGroupIds(gsonToJson(userRgionMap));
@@ -3672,7 +3639,7 @@ public abstract class BaseService {
//commonPolicyDao.auditCfgBatch(CfgIndexInfo.getTablename(),auditCfg,compileIds,null); //commonPolicyDao.auditCfgBatch(CfgIndexInfo.getTablename(),auditCfg,compileIds,null);
return true; return true;
} }
private BaseCfg processUserRegionMap(Map<String,Object> userRgionMap, String key, Set deletedGroups, CfgIndexInfo cfgIndexInfo, CrudDao dao,Class clazz) { private void processUserRegionMap(Map<String,Object> userRgionMap, String key, Set deletedGroups, CfgIndexInfo cfgIndexInfo, CrudDao dao,Class clazz) {
if(userRgionMap.containsKey(key)){ if(userRgionMap.containsKey(key)){
//排除删除的组,添加新的组 //排除删除的组,添加新的组
for(String urlGroup:((String)userRgionMap.get(key)).split(",")){ for(String urlGroup:((String)userRgionMap.get(key)).split(",")){
@@ -3687,59 +3654,40 @@ public abstract class BaseService {
contains=false; contains=false;
} }
if(contains&&cfgIndexInfo.getIsValid()==Constants.VALID_YES){ if(contains&&cfgIndexInfo.getIsValid()==Constants.VALID_YES){
if("IpCommCfg".equals(clazz.getSimpleName())){ String commonGroupIds=userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1);
IpCommCfg searchCfg=new IpCommCfg(); if(StringUtils.isNotBlank(commonGroupIds)){
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1)); if("IpCommCfg".equals(clazz.getSimpleName())){
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r")); IpCommCfg searchCfg=new IpCommCfg();
return searchCfg; searchCfg.setCommonGroupIds(commonGroupIds);
// List commCfgs=dao.findAllList(searchCfg); List commCfgs=dao.findAllList(searchCfg);
// if(CollectionUtils.isNotEmpty(commCfgs)){ if(CollectionUtils.isNotEmpty(commCfgs)){
// cfgIndexInfo.setIpCommGroupCfgList(commCfgs); cfgIndexInfo.setIpCommGroupCfgList(commCfgs);
// } }
}else if("ScriberIdCommCfg".equals(clazz.getSimpleName()) ){ }else if("ScriberIdCommCfg".equals(clazz.getSimpleName()) ){
ScriberIdCommCfg searchCfg=new ScriberIdCommCfg(); ScriberIdCommCfg searchCfg=new ScriberIdCommCfg();
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1)); searchCfg.setCommonGroupIds(commonGroupIds);
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r")); List commCfgs=dao.findAllList(searchCfg);
return searchCfg; if(CollectionUtils.isNotEmpty(commCfgs)){
// List commCfgs=dao.findAllList(searchCfg); cfgIndexInfo.setScriberIdCommGroupList(commCfgs);
// if(CollectionUtils.isNotEmpty(commCfgs)){ }
// cfgIndexInfo.setScriberIdCommGroupList(commCfgs); }else if("UrlCommCfg".equals(clazz.getSimpleName())){
// } UrlCommCfg searchCfg=new UrlCommCfg();
}else if("UrlCommCfg".equals(clazz.getSimpleName())){ searchCfg.setCommonGroupIds(commonGroupIds);
UrlCommCfg searchCfg=new UrlCommCfg(); List commCfgs=dao.findAllList(searchCfg);
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1)); if(CollectionUtils.isNotEmpty(commCfgs)){
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r")); cfgIndexInfo.setUrlCommGroupList(commCfgs);
return searchCfg; }
// List commCfgs=dao.findAllList(searchCfg); }else if("DomainCommCfg".equals(clazz.getSimpleName())){
// if(CollectionUtils.isNotEmpty(commCfgs)){ DomainCommCfg searchCfg=new DomainCommCfg();
// cfgIndexInfo.setUrlCommGroupList(commCfgs); searchCfg.setCommonGroupIds(commonGroupIds);
// } List commCfgs=dao.findAllList(searchCfg);
}else if("DomainCommCfg".equals(clazz.getSimpleName())){ if(CollectionUtils.isNotEmpty(commCfgs)){
DomainCommCfg searchCfg=new DomainCommCfg(); cfgIndexInfo.setDomainCommGroupList(commCfgs);
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1)); }
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r")); }
return searchCfg;
// List commCfgs=dao.findAllList(searchCfg);
// if(CollectionUtils.isNotEmpty(commCfgs)){
// cfgIndexInfo.setDomainCommGroupList(commCfgs);
// }
} }
} }
} }
return null;
}
}
class ProcessUserRegionMapThread<T extends BaseCfg> implements Callable<List<T>> {
private T searchCfg;
private CrudDao dao;
public ProcessUserRegionMapThread(T searchCfg, CrudDao dao){
this.searchCfg=searchCfg;
this.dao=dao;
}
@Override
public List<T> call() throws Exception {
List<T> commCfgs=dao.findAllList(searchCfg);
return commCfgs;
} }
} }

View File

@@ -391,9 +391,9 @@ public class ObjectGroupService extends BaseService {
List<MaatCfg.IpCfg> areaIpRegionList = new ArrayList(); List<MaatCfg.IpCfg> areaIpRegionList = new ArrayList();
//查询子配置 //查询子配置
// entity = this.getObjGroupPolicy(entity.getCfgId()); entity = this.getObjGroupPolicy(entity.getCfgId());
//多线程查询 //多线程查询
entity = this.getObjGroupPolicyMultyThread(entity.getCfgId()); // entity = this.getObjGroupPolicyMultyThread(entity.getCfgId());
end=System.currentTimeMillis(); end=System.currentTimeMillis();
logger.info("查询子配置完成,耗时"+(end-start)+"ms"); logger.info("查询子配置完成,耗时"+(end-start)+"ms");
// if(StringUtils.isBlank(entity.getCommonGroupIds())){ // if(StringUtils.isBlank(entity.getCommonGroupIds())){