产生错误的代码段:
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);