首页 > 编程语言 >java中耗时较长解决办法----使用线程池

java中耗时较长解决办法----使用线程池

时间:2022-12-29 10:11:41浏览次数:38  
标签:map java String ---- 线程 File new null oldNewfileinfo

@RequestMapping(value = "/officeSingleToOfdByFileId", method = RequestMethod.POST)
    public ResponseData officeSingleToOfdByFileId(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map map=new HashMap();
        String fileId=request.getParameter("fileId");
        map.put("oldFileId",fileId);
        String newUrul="";//访问地址
        JSONObject  obj=fileStoreInfoManager.queryOfdFile(map);//查询该文件是否转过ofd文件
        if(obj==null){
            File  file=null;
            Boolean bool=false;//用来判断是否是大文件预览
            File afterFile=null;
            String path = request.getSession().getServletContext().getRealPath("")+ File.separator+ "newofd"+File.separator+fileId+".ofd";
            //转换为ofd文件并入库
            try{
                InputStream inputStream =FileUploadUtil.getInputStreamFromFileServer(fileId);
                FileOutputStream fileOutputStream=new FileOutputStream(path);
                //获取当前查看文件的信息
                map.put("fileId",fileId);
                FileStoreInfo  fileStoreInfoDatabase=fileStoreInfoManager.queryFile(map).toJavaObject(FileStoreInfo.class);
                file=FileUploadUtil.getFile(fileStoreInfoDatabase,inputStream,request,fileId);//流获取文件
                if(file!=null){
                    OldNewfileinfo oldNewfileinfo=new OldNewfileinfo();
                    oldNewfileinfo.setRecid(UuidOpt.getUuidAsString32());
                    oldNewfileinfo.setOdlfileid(fileId);
                    oldNewfileinfo.setSummarys("office文件类型为"+fileStoreInfoDatabase.getFileType()+"转ofd");
                    oldNewfileinfo.setCreatetime(new Date());
                    //小于2M 直接转换成ofd文件
                    if(file.length()<2*1048576){
                        //小文件提前保存是为了防止文件正在转换,用户关闭页面重新打开
                        oldNewfileinfoManager.saveNewObject(oldNewfileinfo);
                        newUrul=getNewUrul(oldNewfileinfo,path,file,fileOutputStream,fileStoreInfoDatabase,inputStream,false);
                    }else{//大于50M的文件通过线程池进行转换上传,上传完处理存入库中
                        bool=true;
                        File  fileNew=file;
                        String pathNew=path;
                        oldNewfileinfo.setIsBigFile("0");
                        oldNewfileinfoManager.saveNewObject(oldNewfileinfo);
                        //使用多线程技术,提高程序的效率    有一个客户端上传文件,就开启一个线程,完成文件的上传
                        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                                5,
                                20,
                                5000,
                                TimeUnit.MILLISECONDS,
                                new ArrayBlockingQueue<>(5),
                                new NamedThreadFactory("thread-pool", false),
                                new ThreadPoolExecutor.AbortPolicy());
                        threadPoolExecutor.submit(new Runnable() {//
                            @SneakyThrows
                            @Override
                            public void run() {
                                getNewUrul(oldNewfileinfo,pathNew,fileNew,fileOutputStream,fileStoreInfoDatabase,inputStream,true);
                            }
                        });
                        threadPoolExecutor.shutdown();
                        newUrul="0";
                    }
                }
            } catch (NullPointerException e) {
                LOG.info("空指针异常");
            } catch (Exception e) {
                System.out.println(e.getMessage());
                System.out.println("文件转换出错");
            }finally {
                if(file!=null){
                    if(!bool){
                        file.delete();
                    }
                }
                if(afterFile!=null){
                    if(!bool){
                        afterFile.delete();
                    }
                }
            }
        }else{
            //如果是大文件类型,并且还没有查询除结果,则返回前台页面url为0
            if(String.valueOf(obj.get("isbigfile")).equals("0") && obj.get("newFileId")==null){
                newUrul="0";
            }else{
                //如果转换过无需在转换,直接查看
                newUrul=obj.get("newFileId")==null?"0":String.valueOf(obj.get("newFileId"));
            }
        }
        return ResponseData.makeResponseData(newUrul);
    }
    /** 
     * @Author qi_xq
     * @Description 办公文件转ofd文件,并且将ofd文件上传至文件服务器并且
     * @Date 9:01 2022/6/8 
     * @Param [oldNewfileinfo, path, file, fileOutputStream, fileStoreInfoDatabase, inputStream]
     * @return java.lang.String
     */
    public String getNewUrul(OldNewfileinfo oldNewfileinfo,String path,File file,FileOutputStream fileOutputStream,FileStoreInfo  fileStoreInfoDatabase,InputStream inputStream,Boolean bool)throws Exception{
        String newUrul="";
        try {
            File  afterFile=new File(path);
            String syText=CodeRepositoryUtil.getValue("SYSZ","A");
            ha.addTextMark(file,fileOutputStream,new TextInfo(syText,"宋体", 18,"#80000",45,Const.XAlign.Center,Const.YAlign.Middle),
                    new MarkPosition(100f, 200f, 100f, 50f, MarkPosition.INDEX_ALL),true,true);
            //上传文件服务器(转换之后的文件)
            FileStoreInfo fileStoreInfo=new FileStoreInfo();
            //获取原服务器文件基本信息
            fileClient=FileUploadUtil.getFileClient();
            fileStoreInfo.setFileName(fileStoreInfoDatabase.getFileName().substring(0,fileStoreInfoDatabase.getFileName().lastIndexOf("."))+".ofd");//设置文件名称
            fileStoreInfo.setFileType(".ofd");//设置文件类型
            //上传文件服务器(转换之后的ofd文件)
            fileStoreInfo= fileClient.uploadFile(fileClient.allocHttpClient(),fileStoreInfo,afterFile);

            oldNewfileinfo.setNewfileid(fileStoreInfo.getFileId());
            oldNewfileinfo.setContents(downFilePath+"/"+oldNewfileinfo.getNewfileid()+CodeRepositoryUtil.getSysConfigValue("reader"));
            oldNewfileinfo.setSummarys("office文件类型为"+fileStoreInfoDatabase.getFileType()+"转ofd");
            oldNewfileinfo.setCreatetime(new Date());
            oldNewfileinfoManager.updateObject(oldNewfileinfo);
            newUrul=fileStoreInfo.getFileId()==null?"":fileStoreInfo.getFileId();
            inputStream.close();
            fileOutputStream.close();
            file.delete();
        } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getMessage());
        }
        return newUrul;
    }

第二种线程方式

@RequestMapping(value = {"/toExportFile"},method = {RequestMethod.GET})
    public void toExportFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
        CentitUserDetails ud = getLoginUser(request);
        String userCode = ud.getUserCode();
//        用户登录超时,跳转到登陆页
        if (ud == null) {
            JsonResultUtils.writeErrorMessageJson("登录失效", response);
        }else {
            Map<String, Object> map = convertSearchColumn(request);
            map.put("idStr", request.getParameter("idStr"));
            map.put("dowTime", request.getParameter("dowTime"));
            System.out.println("**map**"+map);
            new Thread() {
                @Override
                public void run() {
                    String m = "";
                    try {
                        map.put("tempPath", servletContext.getRealPath(File.separator + "temporaryFile") + File.separator + userCode+map.get("dowTime"));
                        map.put("temporaryZipFile", servletContext.getRealPath(File.separator + "temporaryZipFile") + File.separator + userCode+map.get("dowTime"));
                        map.put("tempPathWJJ", servletContext.getRealPath(File.separator + "temporaryFile") + File.separator);
                        map.put("temporaryZipFileWJJ", servletContext.getRealPath(File.separator + "temporaryZipFile") + File.separator);
                        map.put("path", servletContext.getRealPath(""));
                        System.out.println("**map2**"+map);
                        //CommUtil.delAllFiles(new File(map.get("tempPath").toString()), null);
                        //CommUtil.delAllFiles(new File(map.get("temporaryZipFile").toString() + File.separator), null);
                        dowExportFile(map, request, response);
                    } catch (Exception e) {
                        m = e.getMessage();
                        System.out.println(m);
                        System.out.println(e);
                    }
                }
            }.start();
            JsonResultUtils.writeSingleDataJson("开始处理压缩包", response);
        }
    }

 

标签:map,java,String,----,线程,File,new,null,oldNewfileinfo
From: https://www.cnblogs.com/qxqbk/p/17011803.html

相关文章

  • 锦州营口高防网站BGP物理机
    合法电子商务和非法贸易之间的界限也逐渐模糊不清。2018年2月,荷兰警方逮捕了一名18岁的男子,因其涉嫌对几家荷兰企业(包括技术网站动了DDoS攻击。调查显示,该男子是通过暗网......
  • 锦州营口游戏网站高防物理机租用
    旗下喜达屋酒店的一个客房预订数据库被黑客入侵,5亿用户信息或已外泄。据悉,这些客人中约有3.27亿人的信息包括如下信息的组合:姓名、邮寄地址、电话号码、电子邮件地址、护照......
  • C# OPC_DA客户端
    安装 MatrikonOPC软件,用来模拟OPC_DA服务器。参考这篇博文:OPCServer:使用MatrikonOPCServerSimulation-ioufev-博客园(cnblogs.com)从网上下载OPCDAAuto.dll参......
  • 【数据结构】超详细!从HashMap到ConcurrentMap,我是如何一步步实现线程安全的!
    什么是HashMap?在了解 ​​HashMap​​ 之前先了解一下什么是 ​​Map​​;什么是Map?定义​​Map​​ 是一个用于存储Key-Value键值对的集合类,也就是一组键值对的映射,在......
  • #yyds干货盘点# react笔记之学习之空列表提示
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • Java 并发编程解析 | 如何正确理解Java领域中的并发锁,我们应该具体掌握到什么程度?
    写在开头对于Java领域中的锁,其实从接触Java至今,我相信每一位JavaDeveloper都会有这样的一个感觉?不论是Java对锁的实现还是应用,真的是一种“群英荟萃”,而且每一种锁都有点各......
  • Python进阶—Pandas
    Pandas再来一次文章目录​​一、Series和DataFrame​​​​二、选择数据​​​​三、赋值及操作(增、删、改)​​​​四、处理丢失数据​​​​五、读取并写入文件​​​​......
  • Python进阶—Numpy
    Numpy再来一遍文章目录​​一、Numpy的属性​​​​二、创建array​​​​三、Numpy的运算​​​​四、随机数生成及矩阵的统计​​​​五、Numpy索引​​​​六、合并​......
  • 1.计算机系统概论
    计算机组成原理讲解:数字计算机硬件系统的逻辑实现一般原理讲授内容基本部件的结构和组织方式基本运算的操作原理基本部件和单元的设计思想文章目录​​计算机组成原理​​​......
  • 1.专业术语
    机器学习定义:利用经验来改善计算机系统自身的性能目的:让计算机具有人的学习能力以便实现人工智能本质:寻找函数[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来......