Spring boot 异步调用方法

  1. 使用注解 @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);
    			}
    		} 
    
    	}
    	 
    	
    	
    }
    

     

  2. 调用方法

    @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;
        }
    	
    }	

     

  3. 注意事项
     

    1 @Async  的方法不能和调用类的在同一个类中
    2  @Lazy  如果是启动加载,可以用懒加载的方式
  4. 启动加载

    @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();
    		 
    	}
    
    }

     

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值