JAVA如何处理各种批量数据入库(BlockingQueue)

JAVA如何处理各种批量数据入库(BlockingQueue)

这里我推荐大家使用BlockingQueue,该队列为阻塞队列

将数据先写入队列中,然后开启多个消费线程慢慢消费入库。从队列中消费数据有两种方式:

复制代码
 单条消费

 批量消费
一、案例:人脸识别设备---开门记录(批量消费)
1.创建队列
java 复制代码
@Component
public class RequestQueue<T> {
   
	/**
	* 获取开门记录队列
	*/
    BlockingQueue<JSONObject> blockingQueue = new ArrayBlockingQueue<>(1000000,true);
    
     
    /**
     * 获取请求队列数据
     */
    public BlockingQueue<JSONObject> getBlockingQueue(){
        return blockingQueue;
    }
   
    
    
    /**
     * 保存数据进入队列
     */
    public void putJsonDataQueue(JSONObject jsonObject){
        try {
            getBlockingQueue().put(jsonObject);

        }catch (Exception e){
            e.printStackTrace();
        }

    }
    
}
2.创建消费队列任务
java 复制代码
@Component
public class DoorOpeningRecordTask extends Thread{
    @Autowired
    private RequestQueue requestQueue;

    @Autowired
    private DoorOpeningRecordService doorOpeningRecordService;

    @Override
    public void run(){
        while(true){
            try {
                //取出信息列表
                List<JSONObject> list = new ArrayList<>();
                //参数列表: 获取队列  数据  批量处理一百条  500毫秒
                Queues.drain(requestQueue.getBlockingQueue(), list, 100, 500, TimeUnit.MILLISECONDS);
                //对数据进行保存
                doorOpeningRecordService.save(list);

            }catch (Exception e){
                e.printStackTrace();
            }

        }

    }


}
3.监听队列信息
java 复制代码
@Component
public class QueueListener {
    
    @Autowired
    private DoorOpeningRecordTask doorOpeningRecordTask;

    /**
     * 初始化时启动监听请求队列
     */
    @PostConstruct
    public void init() {
        doorOpeningRecordTask.start();
    }

    /**
     * 销毁容器时停止监听任务
     */
    @PreDestroy
    public void destory() {
       
        doorOpeningRecordTask.interrupt();
    }

}
相关推荐
huahailing10247 分钟前
Spring 循环依赖终极解决方案:从原理到实战(附避坑指南)
java·后端·spring
jiaguangqingpanda41 分钟前
Day28-20260124
java·数据结构·算法
Java程序员威哥42 分钟前
SpringBoot2.x与3.x自动配置注册差异深度解析:从原理到迁移实战
java·大数据·开发语言·hive·hadoop·spring boot·后端
cheems95271 小时前
【javaEE】文件IO
java
微露清风1 小时前
系统性学习Linux-第一讲-Linux基础指令
java·linux·学习
tqs_123451 小时前
tcc中的空回滚和悬挂问题
java·数据库
MX_93591 小时前
以配置非自定义bean来演示bean的实例化方式
java·开发语言·后端
哪里不会点哪里.1 小时前
Spring 事务机制详解:原理、传播行为与失效场景
java·数据库·spring
风筝在晴天搁浅2 小时前
hot100 102.二叉树的层序遍历
java·算法
lina_mua2 小时前
Cursor模型选择完全指南:为前端开发找到最佳AI助手
java·前端·人工智能·编辑器·visual studio