AKSTIANYE

Jun 08, 2020

记一次ThreadLocal取值失败的问题

简单描述一下问题的情况

1.springboot项目

2.使用@FeignClient处理微服务之间的调用

3.项目中使用了feign.RequestInterceptor处理token传递,token校验完成后存放于线程变量ThreadLocal

4.开启hystrix后,在RequestInterceptor中无法获取到ThreadLocal存储的token

查找问题的过程

1.首先通过断点发现ThreadLocal取值失败

2.怀疑是不在同一线程中,打印线程名,证实确实不是同一线程

3.了解到Hystrix默认使用线程隔离

处理方式

1.将ThreadLocal换成InheritableThreadLocal,这样可以在子线程内也获取到存入的值

OLDER > < NEWER