用户签字以base64保存到 mysql 每分钟只能保存十个用户

签字base64 保存到mysql 用户提交特别慢 平均每分钟 只能 提交10个人

问题相关代码,请勿粘贴截图

@PostMapping("/getqianzi")
    @ResponseBody
    public AjaxResult getqianzi(@RequestBody List<String> parmes, HttpServletRequest request) {
        HttpSession session = request.getSession();
        String data = (String) session.getAttribute("data");
        if (data == null || data.equals("")) {
            return new AjaxResult(AjaxResult.Type.ERROR, "请返回首页登陆", " ");
        }
        RyCmsf ryCmsf = new RyCmsf();
        ryCmsf.setSfzh(data);
        List<RyCmsf> list = ryCmsfService.selectRyCmsfList12(ryCmsf);
        String zz = null;
        List<String> list5 = new ArrayList<String>();
        String aa = null;
        if (list.size() > 0) {
            for (RyCmsf rr : list) {
                list5.add(rr.getSfzh());
                rr.setYuliu2("1");
                ryCmsfService.updateRyCmsf(rr);
            }
        }

        if (data == null || data.equals("")) {
            return new AjaxResult(AjaxResult.Type.ERROR, "请返回首页登陆", " ");
        }
        RyCmyj ryCmyj = new RyCmyj();
        ryCmyj.setCode("0");
        ryCmyj.setLiuyan("无异议,");
        ryCmyj.setGuanlianZd(data);
        RyCmyj cmyj = ryCmyjService.selectRyCmyjByParcelCode(data);
        if (cmyj == null) {
            ryCmyjService.insertRyCmyj(ryCmyj);
        } else {
            ryCmyjService.updateRyCmyj(ryCmyj);
        }
        //查询该用户的全部签名数据
        RyQianzi ry = new RyQianzi();
        ry.setGuanlian(data);
        List<RyQianzi> ryQianzis = this.ryQianziService.selectRyQianziList(ry);
        //复制数据到ry_qianzi_history
        for (RyQianzi qianzi : ryQianzis) {
            //查询是否存在
            RyQianziHistory history = new RyQianziHistory();
            history.setQianziZfc(qianzi.getQianziZfc());
            history.setGuanlian(qianzi.getGuanlian());
            history.setId(Long.parseLong(DaoHelper.getSeq()));
            history.setYuliu(qianzi.getYuliu());
            historyService.insertRyQianziHistory(history);
            //根据宗地代码删除旧的数据
            ryQianziService.deleteRyQianziById(qianzi.getId());
        }
        ryQianziBackupService.deleteRyQianziBackupByZDDM(data);
        for (int i = 0; i < parmes.size(); i++) {
            RyQianzi ryQianzi = new RyQianzi();
            ryQianzi.setQianziZfc(parmes.get(i));
            ryQianzi.setGuanlian(data);
            ryQianzi.setYuliu(Integer.toString(i + 1));
            ryQianziService.insertRyQianzi(ryQianzi);
            RyQianziBackup ryQianziBackup = new RyQianziBackup();
            ryQianziBackup.setQianziZfc(parmes.get(i));
            ryQianziBackup.setGuanlian(data);
            ryQianziBackup.setYuliu(Integer.toString(i + 1));
            ryQianziBackup.setYuliu1("1");
            ryQianziBackupService.insertRyQianziBackup(ryQianziBackup);
//            try {
//                String s = Base64ToFileImage(parmes.get(i).substring(parmes.get(i).indexOf(",") + 1), data + "--" + new Date().getTime() + ".jpg", data);
//                String qzURL = Constants.RESOURCE_PREFIX + "/" + s.substring(s.indexOf("upload/"));
//                String url = SystemInfoContant.SYSTEM_URL + qzURL;
//
//                URL imgURL = new URL(url.trim());
//
//                HttpURLConnection urlConn = (HttpURLConnection) imgURL.openConnection();//构造连接
//                urlConn.setRequestProperty(SystemInfoContant.REQUEST_PROPERTY1, SystemInfoContant.REQUEST_PROPERTY2);
//                urlConn.setConnectTimeout(SystemInfoContant.TIMEOUT);
//                urlConn.setReadTimeout(SystemInfoContant.TIMEOUT);
//                urlConn.connect();
//                if (urlConn.getResponseCode() == 200) {//返回的状态码是200 表示成功
//                    RyQianzi ryQianzi = new RyQianzi();
//                    ryQianzi.setQianziZfc(qzURL);
//                    ryQianzi.setGuanlian(data);
//                    ryQianzi.setYuliu(Integer.toString(i + 1));
//                    ryQianziService.insertRyQianzi(ryQianzi);
//                    RyQianziBackup ryQianziBackup = new RyQianziBackup();
//                    ryQianziBackup.setQianziZfc(parmes.get(i));
//                    ryQianziBackup.setGuanlian(data);
//                    ryQianziBackup.setYuliu(Integer.toString(i + 1));
//                    ryQianziBackup.setYuliu1("1");
//                    ryQianziBackupService.insertRyQianziBackup(ryQianziBackup);
//                    urlConn.disconnect();
//                } else {
//                    return new AjaxResult(AjaxResult.Type.ERROR, "签名上传失败", " ");
//                }
//
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
        }
        String da = (String) session.getAttribute("da");
        RyCmsf ryCmsf1 = new RyCmsf();
        ryCmsf1.setZddm(da);
        List<RyCmsf> list1 = ryCmsfService.selectRyCmsfList12(ryCmsf1);
        String aa1 = null;
        if (list1.size() > 0) {
            for (RyCmsf rr :
                    list1) {
                aa1 = rr.getSfzh();
            }
        } else {
            return new AjaxResult(AjaxResult.Type.SUCCESS, "成功", 0);
        }
        session.setAttribute("data", aa1);
        return new AjaxResult(AjaxResult.Type.SUCCESS, "成功", 1);
    }


    public String Base64ToFileImage(String base64String, String fileName, String data) {
        if (StringUtils.isBlank(base64String)) {
            return null;
        }
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadPath();
        // 拼接存放地址
        String fileBase64 = filePath + "/" + "Base64QianZi" + "/" + DateUtils.getDate() + "/" + data;
        // base64转字节
        BASE64Decoder decoder = new BASE64Decoder();
        String newUrl = null;
        try {
            byte[] bfile = decoder.decodeBuffer(base64String);
            //调整异常数据
            for (int i = 0; i < bfile.length; ++i) {
                if (bfile[i] < 0) {
                    bfile[i] += 256;
                }
            }
            //文件目录不存在则创建
            File outFile = new File(fileBase64);
            if (!outFile.exists()) {
                outFile.mkdirs();
            }
            //图片地址
            newUrl = fileBase64 + "/" + fileName;
            OutputStream out = new FileOutputStream(newUrl);
            out.write(bfile);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newUrl;
    }
运行结果及报错内容

正常运行没有报错

我的解答思路和尝试过的方法

MySQL 线程池 200扩容到1000 只好了一小会
发现 线程池 大量 休眠线程 修改了存活时间 还是只好了一下下
现在感觉像是操作签字时 进行了表锁 同时只能一个人用 其他人都在排队 抢执行权

我想要达到的结果

并发签字 至少每分钟 100人上下 当然越多越好

数据量太大了,保存到表里不合适,建议保存为图片到文件夹,数据库里面只保存对应的文件名称。

签名操作和表锁什么关系?前端页面锁了后端代码?