異步調用Feign接口空指針問題原因:
Feign接口的Request 默認是主線程和子線程不共享的,當異步調用Feign接口會因爲獲取不到ServletRequestAttributes報空指針。
解決方案:
我們先獲取到當前請求,再分享給子線程。
首先獲取attributes :
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//防止fegin獲取不到當前請求
在線程中設置attributes :
RequestContextHolder.setRequestAttributes(attributes);
實例代碼:
ExecutorService executorService = Executors.newSingleThreadExecutor();
List<ExportFamilyMasterImplForm> finalList = list;
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//防止fegin獲取不到當前請求
executorService.execute(()->{
RequestContextHolder.setRequestAttributes(attributes);
List<ExportFamilyMasterForm> excelList = familyMemberService.dataTransformation(finalList);
});