最近spring boot項目中由於使用了spring cloud 的hystrix 導致了threadLocal中數據丟失,其實具體也沒有使用hystrix,但是顯示的把他打開了,導致了此問題。
導致此問題的代碼邏輯如下:服務之間的調用采用的feignclient,采用feignclient攔截器獲取上游設置到threadlocal中的數據。
@Slf4j
public class TenantSupportInterceptor implements RequestInterceptor {
public void apply(RequestTemplate template) {
String tenantNo = Optional.ofNullable(LocalHolder.getTenantNo());
template.header(CommonConstants.TENANT_NO, tenantNo);
}
}
public final class LocalHolder {
private LocalHolder() {
}
private static final InheritableThreadLocal<String> TENANT_NO_THREADLOCAL = new InheritableThreadLocal<>();
public static void setTenantNo(String tenantNo) {
TENANT_NO_THREADLOCAL.set(tenantNo);
}
public static String getTenantNo() {
return TENANT_NO_THREADLOCAL.get();
}
public static void removeTenantNo() {
TENANT_NO_THREADLOCAL.remove();
}
}
具體為什么采用InheritableThreadLocal下文有說明。
但是有時候就拿不到。經過排查,這兩邊的線程發生了變化,導致取不到值。導致線程發生變化的原因是顯示的聲明了hystrix為true。

只需要把這個設置成false就好。
但是如果項目中真真的是用了hystrix呢?
引用一下文檔進行說明:
和
https://cloud.tencent.com/developer/article/1082737
