详解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处理数据入库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Springboot基于maven打包分离lib及resource
这篇文章主要介绍了Springboot基于maven打包分离lib及resource,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10
JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)
本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有一定的参考价值,需要的朋友可以参考下2025-03-03
在Spring MVC中使用@ControllerAdvice创建全局异常处理器的方法
在Spring MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解来定义全局异常处理器类,并使用 @ExceptionHandler注解来定义处理特定异常的方法,本文就给大家介绍了Spring MVC @ControllerAdvice创建处理器的方法,需要的朋友可以参考下2023-08-08


最新评论