详解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用法详解

    这篇文章主要介绍了Java中this,static,final,const用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Spring Boot项目中如何对接口请求参数打印日志

    Spring Boot项目中如何对接口请求参数打印日志

    在SpringBoot项目中,打印接口请求参数有多种方法,如使用AOP、控制器建议、拦截器、@ModelAttribute、SpringBootActuator、日志框架的MDC、自定义过滤器和SpringWebflux,这些方法有助于API调试和监控,但需注意隐私和敏感信息安全
    2024-10-10
  • java高并发InterruptedException异常引发思考

    java高并发InterruptedException异常引发思考

    这篇文章主要为大家介绍了java高并发InterruptedException异常引发思考,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java中的动态数组和栈Vector Stack使用区别介绍

    Java中的动态数组和栈Vector Stack使用区别介绍

    这篇文章主要为大家介绍了Java中的动态数组和栈Vector Stack使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 利用java获取某个文件夹下的所有文件

    利用java获取某个文件夹下的所有文件

    这篇文章主要给大家介绍了关于如何利用java获取某个文件夹下的所有文件的相关资料,在从事web开发工作中,经常需要对本地某一个目录下的文件进行处理,需要的朋友可以参考下
    2023-07-07
  • springboot启动前执行方法的四种方式总结

    springboot启动前执行方法的四种方式总结

    这篇文章主要给大家介绍了关于springboot启动前执行方法的四种方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Swing常用组件之文本框和文本区

    Swing常用组件之文本框和文本区

    这篇文章主要为大家详细介绍了Swing常用组件之文本框(JTestField)和文本区(JTextArea),Swing是一个用于开发Java应用程序用户界面的开发工具包,本文开始带大家学习Swing
    2016-05-05
  • java 静态代理 动态代理深入学习

    java 静态代理 动态代理深入学习

    代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等,需要的朋友可以参考下
    2012-11-11
  • Mybatis批量插入Oracle数据的方法实例

    Mybatis批量插入Oracle数据的方法实例

    在开发中或多或少都会遇到数据批量插入的功能,最近我在做项目的过程中就遇到了这样一个问题,下面这篇文章主要给大家介绍了关于Mybatis批量插入Oracle数据的相关资料,需要的朋友可以参考下
    2022-01-01
  • 基于ArrayList初始化长度的作用及影响

    基于ArrayList初始化长度的作用及影响

    这篇文章主要介绍了基于ArrayList初始化长度的作用及影响,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论