配置转换改为多线程转换,一个组类型一个线程;审核与更新组配置是查询配置下的所有域的查询改为多线程查询。在多个组的情况下处理速度会加快。

This commit is contained in:
wangxin
2019-07-19 12:59:25 +08:00
parent 12a77173ca
commit 8c514c4e7e
11 changed files with 842 additions and 372 deletions

View File

@@ -8,22 +8,17 @@ import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Set;
import java.util.HashSet;
import java.util.concurrent.*;
import com.nis.domain.basics.*;
import com.nis.domain.configuration.*;
import com.nis.util.*;
import com.nis.web.dao.CrudDao;
import com.nis.web.dao.basics.*;
import com.nis.web.dao.configuration.*;
import com.nis.web.service.configuration.ObjGroupCfgConvert;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringEscapeUtils;
@@ -3379,23 +3374,56 @@ public abstract class BaseService {
Integer serviceId=cfgIndexInfo.getServiceId();
if(serviceId!=null&&StringUtils.isNotBlank(cfgIndexInfo.getCommonGroupIds())){
MaatCfg maatCfg = new MaatCfg();
Set<Integer> groupIdSet=new HashSet<>();
Set<Integer> groupIdSet=Collections.synchronizedSet(new HashSet<Integer>());
List<MaatCfg> configCompileList = new ArrayList();
List<MaatCfg> cancelConfigCompileList = new ArrayList();
List<GroupCfg> groupRelationList = new ArrayList();
List<IpCfg> ipRegionList = new ArrayList();
List<StringCfg> strRegionList = new ArrayList();
List<NumBoundaryCfg> numRegionList = new ArrayList();
List<GroupCfg> groupRelationList = Collections.synchronizedList(new ArrayList());
List<IpCfg> ipRegionList = Collections.synchronizedList(new ArrayList());
List<StringCfg> strRegionList = Collections.synchronizedList(new ArrayList());
List<NumBoundaryCfg> numRegionList = Collections.synchronizedList(new ArrayList());
List<DigestCfg> digestRegionList = new ArrayList();
List<IpCfg> areaIpRegionList = new ArrayList();
Map<String,Object> userRgionMap=gsonFromJson(cfgIndexInfo.getCommonGroupIds(),Map.class);
cfgIndexInfo.setUserRegion(userRgionMap);
String oldCommonGroupIds=cfgIndexInfo.getCommonGroupIds();
//将所有要从配置中删除的组从配置中删除
this.processUserRegionMap(userRgionMap,"ipGroup",ipDeletedGroups,cfgIndexInfo,ipCommGroupCfgDao,IpCommCfg.class);
this.processUserRegionMap(userRgionMap,"urlGroup",urlDeletedGroups,cfgIndexInfo,urlCommGroupCfgDao,UrlCommCfg.class);
this.processUserRegionMap(userRgionMap,"subscribeIdGroup",subIdDeletedGroups,cfgIndexInfo,scriberIdCommGroupDao,ScriberIdCommCfg.class);
this.processUserRegionMap(userRgionMap,"domainGroup",domainDeletedGroups,cfgIndexInfo,domainCommGroupDao,DomainCommCfg.class);
IpCommCfg ipCommCfg=(IpCommCfg)this.processUserRegionMap(userRgionMap,"ipGroup",ipDeletedGroups,cfgIndexInfo,ipCommGroupCfgDao,IpCommCfg.class);
UrlCommCfg urlCommCfg=(UrlCommCfg)this.processUserRegionMap(userRgionMap,"urlGroup",urlDeletedGroups,cfgIndexInfo,urlCommGroupCfgDao,UrlCommCfg.class);
ScriberIdCommCfg scriberIdCommCfg=(ScriberIdCommCfg)this.processUserRegionMap(userRgionMap,"subscribeIdGroup",subIdDeletedGroups,cfgIndexInfo,scriberIdCommGroupDao,ScriberIdCommCfg.class);
DomainCommCfg domainCommCfg=(DomainCommCfg)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));
@@ -3457,47 +3485,84 @@ public abstract class BaseService {
}
}
compileIds.add(cfgIndexInfo.getCompileId());
//多线程转换配置
ObjGroupCfgConvert ipConvert=new ObjGroupCfgConvert("ipGroup",cfgIndexInfo,1,serviceDictMap,maatTableMap,groupIdSet);
ipConvert.setGroupRelationList(groupRelationList);
ipConvert.setIpRegionList(ipRegionList);
ipConvert.setNumRegionList(numRegionList);
ipConvert.setStrRegionList(strRegionList);
ObjGroupCfgConvert subscribeIdConvert=new ObjGroupCfgConvert("subscribeIdGroup",cfgIndexInfo,1,serviceDictMap,maatTableMap,groupIdSet);
subscribeIdConvert.setGroupRelationList(groupRelationList);
subscribeIdConvert.setIpRegionList(ipRegionList);
subscribeIdConvert.setNumRegionList(numRegionList);
subscribeIdConvert.setStrRegionList(strRegionList);
ObjGroupCfgConvert urlConvert=new ObjGroupCfgConvert("urlGroup",cfgIndexInfo,1,serviceDictMap,maatTableMap,groupIdSet);
urlConvert.setGroupRelationList(groupRelationList);
urlConvert.setIpRegionList(ipRegionList);
urlConvert.setNumRegionList(numRegionList);
urlConvert.setStrRegionList(strRegionList);
ObjGroupCfgConvert domainConvert=new ObjGroupCfgConvert("domainGroup",cfgIndexInfo,1,serviceDictMap,maatTableMap,groupIdSet);
domainConvert.setGroupRelationList(groupRelationList);
domainConvert.setIpRegionList(ipRegionList);
domainConvert.setNumRegionList(numRegionList);
domainConvert.setStrRegionList(strRegionList);
Thread t1=new Thread(ipConvert);
Thread t2=new Thread(subscribeIdConvert);
Thread t3=new Thread(urlConvert);
Thread t4=new Thread(domainConvert);
t1.start();
t2.start();
t3.start();
t4.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch (InterruptedException e) {
logger.error("多线程join异常",e);
}
//子表
//IP公共分组
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getIpCommGroupCfgList())){
IpPortCfg cfg = new IpPortCfg();
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
Map<String,List> map = ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,ipRegionList,cfgIndexInfo.getIpCommGroupCfgList(),1,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
groupRelationList=map.get("groupList");
ipRegionList=map.get("dstList");
if(map.get("numRegionList")!=null){
numRegionList.addAll(map.get("numRegionList"));
}
}
// if(CollectionUtils.isNotEmpty(cfgIndexInfo.getIpCommGroupCfgList())){
// IpPortCfg cfg = new IpPortCfg();
// BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
// Map<String,List> map = ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,ipRegionList,cfgIndexInfo.getIpCommGroupCfgList(),1,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
// groupRelationList=map.get("groupList");
// ipRegionList=map.get("dstList");
// if(map.get("numRegionList")!=null){
// numRegionList.addAll(map.get("numRegionList"));
// }
//
// }
//URL公共分组
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getUrlCommGroupList())){
CommonStringCfg cfg = new CommonStringCfg();
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getUrlCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
groupRelationList=map.get("groupList");
strRegionList=map.get("dstList");
}
// if(CollectionUtils.isNotEmpty(cfgIndexInfo.getUrlCommGroupList())){
// CommonStringCfg cfg = new CommonStringCfg();
// BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
// Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getUrlCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
// groupRelationList=map.get("groupList");
// strRegionList=map.get("dstList");
// }
//账号公共分组
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getScriberIdCommGroupList())){
CommonStringCfg cfg = new CommonStringCfg();
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getScriberIdCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
groupRelationList=map.get("groupList");
strRegionList=map.get("dstList");
}
// if(CollectionUtils.isNotEmpty(cfgIndexInfo.getScriberIdCommGroupList())){
// CommonStringCfg cfg = new CommonStringCfg();
// BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
//
// Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getScriberIdCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
// groupRelationList=map.get("groupList");
// strRegionList=map.get("dstList");
//
// }
//域名公共分组
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getDomainCommGroupList())){
CommonStringCfg cfg = new CommonStringCfg();
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getDomainCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
groupRelationList=map.get("groupList");
strRegionList=map.get("dstList");
}
// if(CollectionUtils.isNotEmpty(cfgIndexInfo.getDomainCommGroupList())){
// CommonStringCfg cfg = new CommonStringCfg();
// BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
//
// Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(serviceDictMap,strRegionList,cfgIndexInfo.getDomainCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
// groupRelationList=map.get("groupList");
// strRegionList=map.get("dstList");
//
// }
//构造提交综合服务参数格式
maatCfg.initDefaultValue();
BeanUtils.copyProperties(cfgIndexInfo, maatCfg);
@@ -3594,7 +3659,12 @@ public abstract class BaseService {
if(CollectionUtils.isNotEmpty(maatBean.getConfigCompileList())){
//调用服务接口下发配置数据
String json=gsonToJson(maatBean);
logger.info("策略对象组下发配置参数:"+json);
if(json.length()<Constants.JSON_PRINT_LENTH) {
logger.info("策略对象组下发配置参数:" + json);
}else{
logger.info("策略对象组下发配置内容超过"+Constants.JSON_PRINT_LENTH+",不打印");
// FileUtils.writeToFile("D:\\send.json",json,false);
}
//调用服务接口下发配置
ToMaatResult result = ConfigServiceUtil.postMaatCfg(json);
logger.info("策略对象组下发响应信息:"+result.getMsg());
@@ -3602,7 +3672,7 @@ public abstract class BaseService {
//commonPolicyDao.auditCfgBatch(CfgIndexInfo.getTablename(),auditCfg,compileIds,null);
return true;
}
private void processUserRegionMap(Map<String,Object> userRgionMap, String key, Set deletedGroups, CfgIndexInfo cfgIndexInfo, CrudDao dao,Class clazz) {
private BaseCfg processUserRegionMap(Map<String,Object> userRgionMap, String key, Set deletedGroups, CfgIndexInfo cfgIndexInfo, CrudDao dao,Class clazz) {
if(userRgionMap.containsKey(key)){
//排除删除的组,添加新的组
for(String urlGroup:((String)userRgionMap.get(key)).split(",")){
@@ -3620,35 +3690,56 @@ public abstract class BaseService {
if("IpCommCfg".equals(clazz.getSimpleName())){
IpCommCfg searchCfg=new IpCommCfg();
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
List commCfgs=dao.findAllList(searchCfg);
if(CollectionUtils.isNotEmpty(commCfgs)){
cfgIndexInfo.setIpCommGroupCfgList(commCfgs);
}
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r"));
return searchCfg;
// List commCfgs=dao.findAllList(searchCfg);
// if(CollectionUtils.isNotEmpty(commCfgs)){
// cfgIndexInfo.setIpCommGroupCfgList(commCfgs);
// }
}else if("ScriberIdCommCfg".equals(clazz.getSimpleName()) ){
ScriberIdCommCfg searchCfg=new ScriberIdCommCfg();
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
List commCfgs=dao.findAllList(searchCfg);
if(CollectionUtils.isNotEmpty(commCfgs)){
cfgIndexInfo.setScriberIdCommGroupList(commCfgs);
}
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r"));
return searchCfg;
// List commCfgs=dao.findAllList(searchCfg);
// if(CollectionUtils.isNotEmpty(commCfgs)){
// cfgIndexInfo.setScriberIdCommGroupList(commCfgs);
// }
}else if("UrlCommCfg".equals(clazz.getSimpleName())){
UrlCommCfg searchCfg=new UrlCommCfg();
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
List commCfgs=dao.findAllList(searchCfg);
if(CollectionUtils.isNotEmpty(commCfgs)){
cfgIndexInfo.setUrlCommGroupList(commCfgs);
}
//searchCfg.getSqlMap().put("dsf", configScopeFilter(UserUtils.getUser(),"r"));
return searchCfg;
// List commCfgs=dao.findAllList(searchCfg);
// if(CollectionUtils.isNotEmpty(commCfgs)){
// cfgIndexInfo.setUrlCommGroupList(commCfgs);
// }
}else if("DomainCommCfg".equals(clazz.getSimpleName())){
DomainCommCfg searchCfg=new DomainCommCfg();
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
List commCfgs=dao.findAllList(searchCfg);
if(CollectionUtils.isNotEmpty(commCfgs)){
cfgIndexInfo.setDomainCommGroupList(commCfgs);
}
//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;
}
}