![](/img/trans.png)
[英]Difference between Spring Async, Async with CompletableFuture and Java8 parallel stream
[英]Can I use Spring Async and Java8 parallel stream together
基本上,使用一個調度程序我想同時處理多個 csv 文件。 文件中可以有 1 到 10K 條記錄。 我想並行處理每個文件,如果記錄> 1K,我想並行處理該文件的記錄。
假設有 10 個不同線程的 1OK 記錄。
我的任務是從我有 FTP 文件路徑 URL 的地方讀取一個數據庫表。 並處理這些 csv 文件,驗證 csv 數據並最終保存到 DB 表中。
List<CSVFileRecords> files = filesRepo.findAll();
files.foreach(file->processFile(file));
@Async
void processFile(file) {
InputStream i = getStream(file); //download file
List<Data> data = csvParser.csvToBean(i); //consider 10K records
List<List<Data>> dataList = getListOfList(data);
dataList.parallelStream().foreach(data-> processData(data));
}
List<Response> processData(data) {
validate();
saveAll();
}
不,它不會像你期望的那樣工作。
因為, files.foreach(file->processFile(file));
不錯的選擇是
// 10 - Number of threads
ExecutorService executorService = Executors.newFixedThreadPool(10);
files.foreach(file -> executorService.execute(() -> processFile(file)));
需要注意的是,在您使用 parallelStream 的進程方法內部,它將隨后根據數據的大小創建更多線程。
一個好的做法是在處理之前對數據進行分區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.