java - Feign Client:使用jar运行(CompletableFuture.supplyAsync call Feign Client throw java.lang.IllegalArgumentException)
问题描述
当我升级 jdk 版本 8 -> 17,spring cloud 版本 2020.0.3,spring boot 2.5.4;
CompletableFuture.supplyAsync 调用 Feign Client Code 工作异常;</p>
@FeignClient(value = "mall-product", configuration = {FeignErrorDecoder.class, FeignInterceptor.class, FeignConfig.class}, decode404 = true, contextId = "mall-product-productSku")
public interface ProductSkuFeignClient {
default List<ProductSimpleResponse> findSimpleInfoByProductIds(List<Integer> productIds) {
List<List<Integer>> lists = CompletableFutureUtil.splitList1000(productIds.stream().distinct().collect(Collectors.toList()));
List<List<ProductSimpleResponse>> responses = CompletableFutureUtil.allOfTaskAndReturn(ids ->
findSimpleInfoByProductIds(new ProductIdsRequest(ids)), lists);
return responses.stream().flatMap(Collection::stream).collect(Collectors.toList());
}
@PostMapping("/api/product/sku/simple/info/by/productIds")
List<ProductSimpleResponse> findSimpleInfoByProductIds(@RequestBody ProductIdsRequest request);
}
public static <T, R> List<R> allOfTaskAndReturn(Function<T, R> function, List<T> objects) {
List<CompletableFuture<R>> futures = new ArrayList<>();
for (int i = 0; i < objects.size(); i++) {
int finalI = i;
futures.add(CompletableFuture.supplyAsync(() ->
function.apply(objects.get(finalI)), pool));
}
CompletableFuture<Void> allCompletableFuture = CompletableFuture
.allOf(futures.toArray(new CompletableFuture[0]));
return allCompletableFuture.thenApply(e ->
futures.stream().map(CompletableFuture::join)
.collect(Collectors.toList())).join();
}
2021-11-03 02:34:53.078 [http-nio-8095-exec-4] [错误] [5cc877af-3b0a-450e-af46-469b9c20378c] jcfcCommonGlobalExceptionHandler@toLog:57 - CompletionException java.lang.IllegalArgumentException: 不能查找类 [org.springframework.boot.autoconfigure.condition.OnPropertyCondition] java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture .java:320) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1770) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) java .base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) java.base/java.util。concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java: 165)
解决方案
推荐阅读
- android - Fastlane beta lane 无法在 android Flutter 中创建应用构建
- c++ - Windows 上 OpenCV 应用程序的紧凑构建
- javascript - Vuejs 将数组子元素组合为一个数组
- python - 模型测试的时机和决策树分类器的训练
- mysql - 基于两列 SQL 搜索数据
- javascript - 纯 javascript 的手风琴 - 扩展不跟随组
- python - 如何使用 python 获得响应和访问 AWS Api?
- sql-server - 按序列号将数据集显示为逗号分隔值组
- r - 是否不可能在 Ubuntu 18.04.4 LTS 上安装 R 4.0,因为 r-base-core 需要 libc6 版本 >= 2.29?
- google-apps-script - 电子表格 - 组合来自多个表达式的多个真实结果