-
使用注解 @Async + @Lazy
package com.bootdo.elec.service.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.bootdo.auth.sso.domain.AuthConfDO; import com.bootdo.auth.sso.service.IAuthConfService; import com.bootdo.auth.url.domin.AstrictDO; import com.bootdo.auth.url.domin.Resource; import com.bootdo.auth.url.domin.RuleDO; import com.bootdo.auth.url.service.IAstrictService; import com.bootdo.auth.url.service.IResourceService; import com.bootdo.auth.url.service.IRuleService; import com.bootdo.common.dao.DictDao; import com.bootdo.common.domain.DictDO; import com.bootdo.common.utils.ComponentUtil; import com.bootdo.common.utils.Query; import com.bootdo.elec.dao.IAccessDao; import com.bootdo.elec.dao.IAccessVisitDao; import com.bootdo.elec.dao.IColunmMpDao; import com.bootdo.elec.dao.IElecComDao; import com.bootdo.elec.dao.IElecDao; import com.bootdo.elec.dao.IElecManageMenuDao; import com.bootdo.elec.dao.IErrLogDao; import com.bootdo.elec.dao.IErroSendDao; import com.bootdo.elec.dao.IInspectionDao; import com.bootdo.elec.dao.IInterCofDao; import com.bootdo.elec.dao.IResoDao; import com.bootdo.elec.dao.ISuccLogDao; import com.bootdo.elec.domain.ColunmMpDO; import com.bootdo.elec.domain.ElecComDO; import com.bootdo.elec.domain.ElecDO; import com.bootdo.elec.domain.ErrLogDO; import com.bootdo.elec.domain.ErroSendDO; import com.bootdo.elec.domain.InterCofDO; import com.bootdo.elec.domain.ResoDO; import com.bootdo.elec.service.IColunmMpService; import com.bootdo.elec.service.ISynService; import com.bootdo.elec.service.InterCofService; import com.bootdo.elec.thread.ElecGetService; import com.bootdo.elec.util.Constant; import com.bootdo.system.domain.RoleDO; import com.bootdo.system.domain.SysUserDO; import com.bootdo.system.service.ISysUserService; import com.bootdo.system.service.RoleService; @Service public class SynService implements ISynService { @Lazy @Autowired private IErrLogDao errLogDao; @Autowired private IInspectionDao inspectionDao; @Autowired private IResourceService resourceService; @Autowired private IAuthConfService confService; @Lazy @Autowired private IElecDao elecDao; private static Query query = null; static { Map<String, Object> params = new HashMap<String, Object>(); params.put("offset", 0); params.put("limit", 100000); query = new Query(params); } /** * 删除同步到各个数据库 * * @param elec */ @Override @Async public void batchRemoveSync(String[] ids) { errLogDao.batchRemoveElecId(ids); inspectionDao.batchElecIdRemove(ids); resourceService.removeResources(Arrays.asList(ids)); // 同步资源组 confService.batchElecIdRemove(ids); accessDao.batchRemoveElecId(ids); interCofDao.batchRemoveElecId(ids); elecManageMenuDao.batchRemoveElecId(ids); iAccessVisitDao.batchRemoveElecId(ids, null, null); } /** * 启动加载字典缓存 */ @Override @Async public void getListDictMap() { List<DictDO> list = dictDao.listTypeMap(); List<DictDO> listD = null; ComponentUtil.mapDictValue.clear(); ComponentUtil.mapDictDo.clear(); ComponentUtil.mapDictDoType.clear(); ComponentUtil.mapDict.clear(); if (list != null && list.size() > 0) { DictDO dictDO = null; for (int i = 0; i < list.size(); i++) { dictDO = list.get(i); ComponentUtil.mapDictValue.put(dictDO.getType() + dictDO.getValue(), dictDO.getName()); ComponentUtil.mapDictDo.put(dictDO.getType() + dictDO.getValue(), dictDO); ComponentUtil.mapDictDoType.put(dictDO.getType(), dictDO); listD = ComponentUtil.mapDict.get(dictDO.getType()); if (listD == null) { listD = new ArrayList<DictDO>(); } listD.add(dictDO); ComponentUtil.mapDict.put(dictDO.getType(), listD); } } } }
-
调用方法
@Service public class ElecServiceImpl implements IElecService { @Value("${menu.jkId}") private String jkId; // 注解赋值 对应 application-dev.yml @Autowired private IElecDao elecDao; @Autowired private IErrLogDao errLogDao; @Autowired private IInspectionDao inspectionDao; @Autowired private IProbeDao probeDao; @Autowired private ISendService sendService; @Autowired private IElecManageMenuDao elecManageMenuDao; @Autowired private ISynService synService; @Override public int batchRemove(String[] ids) { int reU = elecDao.batchRemove(ids); synService.batchRemoveSync(ids); synService.getListElecMap(); return reU; } }
-
注意事项
1 @Async 的方法不能和调用类的在同一个类中 2 @Lazy 如果是启动加载,可以用懒加载的方式 -
启动加载
@Component @Order(value = 0) public class ComponentUtil implements CommandLineRunner { public static Map<String, List<DictDO>> mapDict = new HashMap<String, List<DictDO>>(); public static Map<String, String> mapDictValue = new HashMap<String, String>(); public static Map<String, DictDO> mapDictDo = new HashMap<String, DictDO>(); public static Map<String, DictDO> mapDictDoType = new HashMap<String, DictDO>(); public static Map<String, ElecDO> mapElecValue = new LinkedHashMap<String, ElecDO>(); public static Map<String, ElecDO> mapElecNameValue = new LinkedHashMap<String, ElecDO>(); public static Map<String, ElecComDO> mapElecComValue = new LinkedHashMap<String, ElecComDO>(); public static Map<Integer, ResoDO> mapResoValue = new HashMap<Integer, ResoDO>(); public static Map<Integer, ErroSendDO> mapErroSendValue = new HashMap<Integer, ErroSendDO>(); public static Map<String, ErroSendDO> mapeUserSend = new HashMap<String, ErroSendDO>(); public static Map<String, String> mapErroPro = new HashMap<String, String>(); public static Map<String, ColunmMpDO> mapColunmMpDO = new LinkedHashMap<String, ColunmMpDO>(); public static Map<String, ColunmMpDO> mapColunmNameMpDO = new LinkedHashMap<String, ColunmMpDO>(); public static Map<String, Date> mapSend = new HashMap<String, Date>();// 消息推送时间 public static Map<Long, SysUserDO> mapSysUser = new HashMap<Long, SysUserDO>(); public static Map<String, InterCofDO> InterCofMap = new HashMap<String, InterCofDO>(); public static Map<Long, RoleDO> mapRole = new HashMap<Long, RoleDO>(); public static Map<String, List<AstrictDO>> mapAstrict = new HashMap<String, List<AstrictDO>>(); public static Map<String, List<RuleDO>> mapRule = new HashMap<String, List<RuleDO>>(); public static Map<String, String> mapDtype = new HashMap<String, String>(); @Autowired private ISynService synService; @Override public void run(String... arg0) throws Exception { synService.getListDictMap(); } }
Spring boot 异步调用方法
最新推荐文章于 2023-05-11 09:00:00 发布