项目优化 单线程太慢,改为多线程 经常报数据库锁死,求大神指导下优化下,谢谢

本文介绍了一种使用SpringMVC框架实现的委外案件批量导入与更新的方法,通过解析HTTP请求中的Excel文件,读取案件数据并进行校验,然后将数据分批保存到数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    mysql 数据库页面导入Excel  更新单表数据
    /**
     * 委外上传待确认案件
     * 
     * @param fileName
     * @param httpSession
     */
    @RequestMapping(value = "/upLoadOaAssignTemp", method = { RequestMethod.POST })
    @ResponseBody
    public void upLoadOaAssignTemp(HttpServletRequest request, HttpServletResponse response) {
        
        try {
            ExecutorService executorService = Executors.newFixedThreadPool(NEWFIXEDTHREADPOOL);
            response.setContentType("text/html");
            response.setCharacterEncoding("utf-8");
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List<?> items = null;
            try {
                items = upload.parseRequest(request);
            } catch (FileUploadException ex) {
                ex.printStackTrace();
            }
            Iterator<?> iter = items.iterator();
            if (items.size() == 0) {
                response.getWriter().write("error");
            }
            
            
            while(iter.hasNext()){

                FileItem item = (FileItem)iter.next();
                try {
                    
                    // 读取文件中的内容
                    List<List<String>> arrCells = jXLExcelUtils.readExcel(item, 1);
                    // 校验数据
                    checkUpLoadOaAssignTemp(arrCells);
                    // 保存数据
                    List<List<List<String>>> splitList = splitList(arrCells,500);
                    for (List<List<String>> list : splitList) {
                        saveUpLoadOaAssignTemp(list);
                    }
                } catch (ProcessException pe) {
                    response.getWriter().write(pe.getMessage());
                    logger.info(pe.getMessage());
                } catch (FlatException e) {
                    response.getWriter().write(e.getMessage());
                    logger.info(e.getMessage());
                } catch (Exception e) {
                    response.getWriter().write("导入委外待确认案件失败!");
                    logger.info(e.getMessage());
                }
            
            }
            
        } catch (Exception e) {
            throw new FlatException("上传处理失败,失败原因:"+e.getMessage());
        }
    }

 

 

 

 

 

 


    @Transactional
    private void saveUpLoadOaAssignTemp(List<List<String>> arrCells) throws Exception {
        //    0      1     2       3      4           5       6       7       8            9
        //{"账户号","合同号","客户姓名","逾期天数","逾期期数","逾期总额","队列编码","外包厂商","外包开始日期","外包结束日期"};
        try {
        
            QErmasOaAssignTemp qErmasOaAssignTemp = QErmasOaAssignTemp.ermasOaAssignTemp;
            QErmasAccount qErmasAccount = QErmasAccount.ermasAccount;
            LinkedList<ErmasOaAssignTemp> linkedList = new LinkedList<ErmasOaAssignTemp>();
            LinkedList<String> acctNoList = new LinkedList<String>();
            for (List<String> list : arrCells) {
                String acctNo = list.get(0).trim();
                acctNoList.add(acctNo);
            }
            
            
            Iterable<ErmasOaAssignTemp> ermasOaAssignTempList = rErmasOaAssignTemp.findAll(qErmasOaAssignTemp.acctNo.in(acctNoList));
            HashMap<String, ErmasOaAssignTemp> ermasOaAssignMap = new HashMap<String, ErmasOaAssignTemp>();
            for (ErmasOaAssignTemp ermasOaAssignTemp2 : ermasOaAssignTempList) {
                ermasOaAssignMap.put(ermasOaAssignTemp2.getAcctNo(), ermasOaAssignTemp2);
            }
            
            for (List<String> list : arrCells) {
                logger.info("---------{}------------",list.get(0));
                String acctNo = list.get(0).trim();
                String oaOrgNo = list.get(7).trim();
                ErmasOaAssignTemp ermasOaAssignTemp = ermasOaAssignMap.get(acctNo);
                ermasOaAssignTemp.setOaOrgNo(oaOrgNo);
                linkedList.add(ermasOaAssignTemp);
            }
            rErmasOaAssignTemp.save(linkedList);
        } catch (Exception e) {
            for (List<String> list : arrCells) {
                logger.error("-----批量保存委外待确认案件异常-异常原因{}-异常数据------",list.toString());
            }
            logger.error("-----批量保存委外待确认案件异常-异常原因{}-------",e);
        }
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值