嗨,我有一个大小为500k的列表,我必须用哈希参数向服务器发出请求。服务器接受200个对象的JSON数组。这样我每次可以发送200个项目。但我仍然需要每次拆分列表,并将该部分发送到服务器。
我有一个方法,它会发出http post请求。我想使用spring-boot选项(如果可用(用不同的线程调用该方法,并得到响应并将它们合并为一个。
我使用没有任何springboot标记的java CompletableFuture类完成了这项工作。但是你也可以使用@async作为你的方法。示例代码:
var futures = new ArrayList<CompletableFuture<List<Composite>>>();
var executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (List<CompositeRecord> records : Lists.partition(recordsList, 200)) {
var future = CompletableFuture.supplyAsync(() -> /* call your method here */, executor);
futures.add(future);
Thread.sleep(2000);
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).exceptionally(ex -> null).join(); // avoid throwing an exception in the join() call
var futureMap = futures.stream().collect(Collectors.partitioningBy(CompletableFuture::isCompletedExceptionally));
var compositeWithErrorList = new ArrayList<Composite>();
futureMap.get(false).forEach(l -> {
try {
compositeWithErrorList.addAll(l.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
执行完代码后,您将获得已完成和未完成的未来的映射。