详解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中this,static,final,const用法详解
这篇文章主要介绍了Java中this,static,final,const用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-07-07java高并发InterruptedException异常引发思考
这篇文章主要为大家介绍了java高并发InterruptedException异常引发思考,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08Java中的动态数组和栈Vector Stack使用区别介绍
这篇文章主要为大家介绍了Java中的动态数组和栈Vector Stack使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10
最新评论