詳解java如何處理各種批量數(shù)據(jù)入庫(kù)
這里我推薦大家使用BlockingQueue,該隊(duì)列為阻塞隊(duì)列
將數(shù)據(jù)先寫入隊(duì)列中,然后開啟多個(gè)消費(fèi)線程慢慢消費(fèi)入庫(kù)。從隊(duì)列中消費(fèi)數(shù)據(jù)有兩種方式:
- 單條消費(fèi)
- 批量消費(fèi)
一、案例:人臉識(shí)別設(shè)備—開門記錄(批量消費(fèi))
1.創(chuàng)建隊(duì)列
@Component
public class RequestQueue<T> {
/**
* 獲取開門記錄隊(duì)列
*/
BlockingQueue<JSONObject> blockingQueue = new ArrayBlockingQueue<>(1000000,true);
/**
* 獲取請(qǐng)求隊(duì)列數(shù)據(jù)
*/
public BlockingQueue<JSONObject> getBlockingQueue(){
return blockingQueue;
}
/**
* 保存數(shù)據(jù)進(jìn)入隊(duì)列
*/
public void putJsonDataQueue(JSONObject jsonObject){
try {
getBlockingQueue().put(jsonObject);
}catch (Exception e){
e.printStackTrace();
}
}
}
2.創(chuàng)建消費(fèi)隊(duì)列任務(wù)
@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<>();
//參數(shù)列表: 獲取隊(duì)列 數(shù)據(jù) 批量處理一百條 500毫秒
Queues.drain(requestQueue.getBlockingQueue(), list, 100, 500, TimeUnit.MILLISECONDS);
//對(duì)數(shù)據(jù)進(jìn)行保存
doorOpeningRecordService.save(list);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
3.監(jiān)聽隊(duì)列信息
@Component
public class QueueListener {
@Autowired
private DoorOpeningRecordTask doorOpeningRecordTask;
/**
* 初始化時(shí)啟動(dòng)監(jiān)聽請(qǐng)求隊(duì)列
*/
@PostConstruct
public void init() {
doorOpeningRecordTask.start();
}
/**
* 銷毀容器時(shí)停止監(jiān)聽任務(wù)
*/
@PreDestroy
public void destory() {
doorOpeningRecordTask.interrupt();
}
}
到此這篇關(guān)于詳解java如何處理各種批量數(shù)據(jù)入庫(kù)的文章就介紹到這了,更多相關(guān)java處理數(shù)據(jù)入庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBatch結(jié)合SpringBoot簡(jiǎn)單使用實(shí)現(xiàn)工資發(fā)放批處理操作方式
這篇文章主要介紹了SpringBatch結(jié)合SpringBoot簡(jiǎn)單使用實(shí)現(xiàn)工資發(fā)放批處理操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
聊聊Arrays.deepToString()和Arrays.toString()的區(qū)別
這篇文章主要介紹了聊聊Arrays.deepToString()和Arrays.toString()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
從0開始教你開發(fā)一個(gè)springboot應(yīng)用
這篇文章主要為大家介紹了從0開始開發(fā)一個(gè)springboot應(yīng)用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Java中實(shí)現(xiàn)String字符串用逗號(hào)隔開
這篇文章主要介紹了Java中實(shí)現(xiàn)String字符串用逗號(hào)隔開,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解
這篇文章主要介紹了Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

