文档章节

批量处理工具BatchUtil

疏影横斜
 疏影横斜
发布于 03/31 00:54
字数 397
阅读 10
收藏 0

主要为了处理大量查询数据造成的慢sql

package **;

import java.util.List;

/**
 * 批量处理工具
 */
public class BatchUtil{
    public final static int BATCH_GET_ID_SIZE = 500;
    public final static int BATCH_SAVE_SIZE = 1000;
    public final static int BATCH_QUERY_SIZE = 5000;

    public interface OperateCallback<T>{
        void operate(List<T> list) throws Exception;
    }

    public interface OperateCallbackWithProgress<T>{
        /**
         * 操作方法
         *
         * @param list     要处理的list
         * @param progress 进度
         * @throws Exception
         */
        void operate(List<T> list, int progress) throws Exception;
    }

    public interface QueryCallBack{
        void callBack(Integer start, Integer size) throws Exception;
    }

    public static void batchQuery(int count, QueryCallBack queryCallBack) throws Exception{
        for(int i = 0; (count > 0 && i <= count / BATCH_QUERY_SIZE && count % BATCH_QUERY_SIZE != 0)
                || (count > 0 && i < count / BATCH_QUERY_SIZE && count % BATCH_QUERY_SIZE == 0); i++){
            queryCallBack.callBack(i * BATCH_QUERY_SIZE, BATCH_QUERY_SIZE);
        }
    }

    public static void batchQuery(int count, int batchSize, QueryCallBack queryCallBack) throws Exception{
        for(int i = 0; (count > 0 && i <= count / batchSize && count % batchSize != 0)
                || (count > 0 && i < count / batchSize && count % batchSize == 0); i++){
            queryCallBack.callBack(i * batchSize, batchSize);
        }
    }

    public static <T> void batchOperate(List<T> list, int batchSize, OperateCallback<T> callBack) throws Exception{
        if(null == list || list.isEmpty()){
            return;
        }
        int cardCount = list.size();
        if(cardCount > batchSize){
            for(int i = 0;
                (i <= cardCount / batchSize && cardCount % batchSize != 0) || (i < cardCount / batchSize && cardCount % batchSize == 0);
                i++){
                List<T> longs;
                boolean last = (cardCount % batchSize == 0 && cardCount / batchSize == (i + 1))
                        || (cardCount % batchSize != 0 && cardCount / batchSize == i);
                // 最后一次循环
                if(last){
                    longs = list.subList(i * batchSize, cardCount);
                }
                else{
                    longs = list.subList(i * batchSize, (i + 1) * batchSize);
                }
                callBack.operate(longs);
            }
            return;
        }
        callBack.operate(list);
    }

    public static <T> void batchOperate(List<T> list, int batchSize, OperateCallbackWithProgress<T> callBack) throws Exception{
        if(null == list || list.isEmpty()){
            return;
        }
        int cardCount = list.size();
        if(cardCount > batchSize){
            for(int i = 0; (i <= cardCount / batchSize && cardCount % batchSize != 0) || (i < cardCount / batchSize && cardCount % batchSize == 0); i++){
                List<T> longs;
                boolean last = (cardCount % batchSize == 0 && cardCount / batchSize == (i + 1))
                        || (cardCount % batchSize != 0 && cardCount / batchSize == i);
                // 最后一次循环
                if(last){
                    longs = list.subList(i * batchSize, cardCount);
                    callBack.operate(longs, 100);
                }
                else{
                    longs = list.subList(i * batchSize, (i + 1) * batchSize);
                    callBack.operate(longs, (i + 1) * batchSize * 100 / cardCount);
                }
            }
            return;
        }
        callBack.operate(list, 100);
    }
}

 

© 著作权归作者所有

疏影横斜

疏影横斜

粉丝 7
博文 14
码字总数 6250
作品 0
青岛
私信 提问
12 个最棒的批量图像处理工具

现在的数码相机几乎人手好几部,因此有一款好用的批量照片处理工具是必不可少的,本文向你推荐 12 款很棒的批量照片处理工具,可用来批量修改尺寸、格式转换等。 BDSizer 如果你有很多图片需...

红薯
2012/01/07
2.7K
7
20170203L07-04老男孩linux运维实战培训-expect命令脚本语言应用实战指南(含3个生产实战案例)

这一节一小时33分钟说的是关于批量布置的 说实话有点长,还是要有点耐心才看得完 而且还要消化 批量布置有很多种工具和方法 1 secboy #运维工具 2 secureCRT #远程登录工具 3 ssh 免密钥的方...

wangchangshu2
2017/02/04
0
0
某软件的集成批量处理

【项目背景】 在摸个论坛平台上可以下载一个安装包,这个安装包中包含几个文件,但是此安装包安装时需要一个授权的序列号(此序列号单次有效)。 【项目目标】 1、通过对此序列号的管理实现只...

kbg
2017/05/16
14
1
Linux中如何使用gThumb批量调整图片大小

由于主要步骤都以 gThumb 为中心,所以请先确保你在系统中已经安装了该应用。如果没有,可以自行在 Ubuntu Software Center 中搜索安装。当 gThumb 安装好之后,便可以点击选中要批量处理的图...

linuxprobe
2016/06/10
23
0
批量打印实现

批量打印的难点: 1、文本显示的样式; 2、不同浏览器打印的兼容性 3、账单个数上万时,服务端的性能(起码要保证不能把内存消耗完,导致内存溢出)。 对应的处理方案: 1、打印样式通过htm...

鹏城二少
2016/12/16
452
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
23分钟前
14
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
24分钟前
12
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
28分钟前
13
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
37分钟前
12
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
39分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部