public CopyOfExportTask(
      String connectUrls,
      String queryProcedure,
      Map<String, String> params,
      String resultProcedure,
      HttpServletRequest request) {
    this.connectUrls = connectUrls;

    this.params = new HashMap<String, String>();
    Object[] keys = params.keySet().toArray();
    this.keys = new String[keys.length];
    for (int i = 0; i < keys.length; i++) { // 把map里所有key转成小写,与执行的存储过程保持一致
      String key = keys[i].toString();
      this.keys[i] = key.toLowerCase();
      this.params.put(key.toLowerCase(), MapUtils.getString(params, key, ""));
    }
    this.queryProcedure = handleSql(queryProcedure.toLowerCase(), this.params);
    this.resultProcedure = resultProcedure.toLowerCase();
    this.fileName =
        MapUtils.getString(params, "modulename", "导出文件")
            + "_"
            + new SimpleDateFormat(Constant.TIMESTAMP_FORMAT_yyyyMMddHHmmssSSS).format(new Date())
            + Constant.EXCEL;
    this.ip = request.getServerName();
    this.port = request.getServerPort();
    this.filePath =
        request.getRealPath(Constant.EXPORT_PATH_FOLDER) + File.separatorChar + this.fileName;
    this.jt = DBUtil.getReadJdbcTemplate(this.connectUrls);
  }
 private void updateExportResult() {
   JdbcTemplate writeJt = DBUtil.getWriteJdbcTemplate(connectUrls);
   writeResult(
       writeJt,
       resultProcedure,
       this.params,
       "http://" + this.ip + ":" + this.port + "/export/download/" + fileName,
       "");
 }
  @Override
  public void run() {
    try {
      int total = getCount(jt, queryProcedure); // 总记录数
      if (total == 0) {
        throw new Exception("没有能导出的数据!");
      }

      double totalPages = getPages(total);

      SXSSFWorkbook wb = null;
      FileInputStream fis = null;

      for (int i = 0; i < totalPages; i++) { // 总共要查询数据库的次数
        List<Map<String, Object>> list = query(jt, queryProcedure, pageCount, i + 1); // 查询分页数据
        if (list != null && list.size() != 0) {
          if (this.titles == null) { // 设置标题数组,方便以后使用
            handleTitles(list); // 处理标题数组
          }

          File file = new File(filePath);
          if (!file.exists()) {
            wb = createWorkbook(); // 生成excel对象
          }
          POIUtil.exportPerpareShit(list, wb, this.titles); // 将本分页数据写入excel对象
        }
      }
      writeToFile(wb); // 将excel对象写入硬盘的excel文件

      updateExportResult(); // 更新导出结果

    } catch (Exception e) {
      JdbcTemplate writeJt = DBUtil.getWriteJdbcTemplate(connectUrls);
      writeResult(writeJt, resultProcedure, this.params, "", e.getMessage());
    }
  }