因為異步編排的原因,他會丟掉ThreadLocal中原來線程的數據,從而獲取不到loginUser,這種情況下我們可以在方法內的局部變量中先保存原來線程的信息,在異步編排的新線程中拿着局部變量的值重新設置到新線程中即可。
由於RequestContextHolder使用ThreadLocal共享數據,所以在開啟異步時獲取不到老請求的信息,自然也就無法共享cookie了

在這種情況下,我們需要在開啟異步的時候將老請求的RequestContextHolder的數據設置進去
OrderServiceImpl.confirmOrder()代碼
// 從主線程獲取用戶數據 放到局部變量中
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
CompletableFuture<Void> getAddressFuture = CompletableFuture.runAsync(() -> {
// 把舊RequestAttributes放到新線程的RequestContextHolder中
RequestContextHolder.setRequestAttributes(attributes);
// 遠程查詢所有的收獲地址列表
List<MemberAddressVo> address;
try {
address = memberFeignService.getAddress(MemberRespVo.getId());
