多线程的执行job

多线程的执行job

// 1.查询总条数
    @Override
    public R initOrdinaryMerc() {
        int count = crmOrdinaryMercMapper.selectRenewMercCount();
        int maxPage = (count % pageSize == 0) ? (count / pageSize) : (count / pageSize + 1);
        log.info("总共{}条续费商户数据", count);
        // 避免再job中查询太过频繁,查询出需要的user信息然后存进redis中
        SysUser user = new SysUser();
        user.setDutys(DutyEnum.BIGCUSTOMER.getValue() + "," + DutyEnum.PHONECUSTOMER.getValue());
        List<SysUser> userList = remoteUserService.findListByUser(user);
        userList.forEach(u -> {
            redisUtils.set(coustomerKey + u.getUserId(), u, 3600);
        });
        doPageRenewal(1, maxPage);
        log.info("商户中心续费数更新完成");
        return R.ok();
    }

// 2.引入一个固定线程池数量的线程池执行器
private ExecutorService executorservice = Executors.newFixedThreadPool(4);

// 3.循环递归的进行调用使用分页的方法查询数据,多线程执行
    private void doPageRenewal(int pageIndex, int maxPage) {
        String operationName = ServletUtils.getHeader(Constants.CURRENT_LOGINNAME);
        log.info("执行页码" + pageIndex);
        PageHelper.startPage(pageIndex, pageSize);
        if (pageIndex > maxPage) {
            return;
        }
        List<CrmOrdinaryMerc> list = crmOrdinaryMercMapper.selectRenewMercList();

        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        for (CrmOrdinaryMerc merc : list) {
            try {
                if (ObjectUtil.isNotNull(merc)){
                    executorservice.submit(new OrdinaryMercRunnable(merc, operationName));
                }
            } catch (Exception e) {
                log.info("", e);
            }
        }
        pageIndex += 1;
        doPageRenewal(pageIndex, maxPage);
    }

// 4.执行器执行
    /**
     * 执行器
     */
    public class OrdinaryMercRunnable implements Runnable {

        CrmOrdinaryMerc crmOrdinaryMerc;
        private String operationName;

        // 构造方法
        public OrdinaryMercRunnable(CrmOrdinaryMerc crmOrdinaryMerc, String operationName) {
            this.crmOrdinaryMerc = crmOrdinaryMerc;
            this.operationName = operationName;
        }

        @Override
        public void run() {
            try {
                execute(crmOrdinaryMerc, operationName);
            } catch (Exception e) {
                log.info("执行失败", e);
            }

        }
    }

// 具体的实现业务逻辑
    private void execute(CrmOrdinaryMerc ordinaryMerc, String operationName) {
    	// 业务逻辑
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值