详解java如何处理各种批量数据入库
更新时间:2023年11月16日 15:58:48 作者:胡萝卜★
这篇文章主要为大家详细介绍了java如何使用BlockingQueue处理各种批量数据入库,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
这里我推荐大家使用BlockingQueue
,该队列为阻塞队列
将数据先写入队列中,然后开启多个消费线程慢慢消费入库。从队列中消费数据有两种方式:
- 单条消费
- 批量消费
一、案例:人脸识别设备—开门记录(批量消费)
1.创建队列
@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.创建消费队列任务
@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.监听队列信息
@Component public class QueueListener { @Autowired private DoorOpeningRecordTask doorOpeningRecordTask; /** * 初始化时启动监听请求队列 */ @PostConstruct public void init() { doorOpeningRecordTask.start(); } /** * 销毁容器时停止监听任务 */ @PreDestroy public void destory() { doorOpeningRecordTask.interrupt(); } }
到此这篇关于详解java如何处理各种批量数据入库的文章就介绍到这了,更多相关java处理数据入库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java多线程循环栅栏CyclicBarrier正确使用方法
这篇文章主要介绍了Java多线程循环栅栏CyclicBarrier正确使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09springboot项目完整后端请求Controller层优雅处理
这篇文章主要为大家介绍了springboot项目Controller层代码的优雅处理实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-07-07fasterxml jackson反序列化时对于非静态内部类报错问题及解决
这篇文章主要介绍了fasterxml jackson反序列化时对于非静态内部类报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08
最新评论