文章目錄
-
-
- 業務
- 流程圖
- 項目位址
-
業務
場景一:根據商品分類或品牌或商品屬性查詢出商品資訊
場景二:根據商品分類或商品屬性查詢屬性資訊
查詢分類時,需要查到最末級分類,也就是選擇一級類目時,查詢出二級類目、三級類目的資料,當選擇二級類目時,則查詢二級類目、三級類目資料,查詢三級類目時,則查詢三級資料,三級類目是最後一級類目
由于資料量很大,是以在導出時采用多線程查詢db資料,一個線程負責寫excel操作。
查詢出db資料後,又要對資料進行單個查詢處理,補齊資料對象,是以在循環時采用
stream 的 parallelStream
來處理,将結果添加到别一個集合時,注意要使用線程安全的list 例如:
Collections.synchronizedList(new ArrayList<>(10));
流程圖
通過有界阻塞對隊FIFO,實作生産者和消費模式,隊列滿時,則生産者阻塞,隊列為空時,消費者阻塞,查詢db資料是多個線程,而寫 excel 檔案的一個sheet是一個線程(經測試 excel 在建立行時隻能從上向下建立, 當用多個線程在一個sheet裡建立行并寫資料時,會出現打開異常提示或資料出現空白,因為多線程建立行寫資料時,可能後面的行已經建立了,但前面的行還沒有建立,在excel中是不允許的,所在這裡用單線程來建立行和寫資料
)
項目位址
Excel 多線程導出