产生错误的代码段:
CompletableFuture<Void> addressFuture1 = CompletableFuture.runAsync(() -> {
//处理国籍信息
dealNationality(tbProfessionPageInfo.getList());
}, executor);
由于dealNationality方法通过fegin调用基础信息服务模块,但是因为加了异步之后产生了空指针异常的错误

我通过aop拦截一下fegin调用的过程,发现空指针的原因来自于

原因是异步的方法里获取不到当前的请求。所以我们解决的办法也很简单:我们先获取到当前请求,再分享给子线程
所以最终改造之后的代码如下:
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//防止fegin获取不到当前请求
CompletableFuture<Void> addressFuture1 = CompletableFuture.runAsync(() -> {
RequestContextHolder.setRequestAttributes(attributes);
//处理国籍信息
dealNationality(tbProfessionPageInfo.getList());
}, executor);
本文讲述了如何在 CompletableFuture 异步任务中解决因 Fegin 调用导致的空指针异常,通过获取并保存当前请求,确保在子线程中正确处理。关键在于理解请求上下文并应用 RequestContextHolder。
1493





