ThreadLocal在线程池环境下使用(SpringBoot)
ThreadLocal的问题
当今项目,大多数都会使用线程池的,而ThreadLocal是基于线程的,这就有一个问题,如果ThreadLocal没有及时清理的话,碰到线程被复用的时候,就可以获取到上一次请求的数据。
关于这个问题,网上其实有很多解决方案,但是都是要手动清理ThreadLocal,这个清理的时机,就是一个问题,在什么时候清,如果方法里用完就清,你能保证其他方法就不用了吗?而且手动清理总有不小心漏掉的情况。
解决方案
其实可以通过对ThreadLocal进行一个小小的封装,就可以解决这个问题。
- TheadLocal不要作为业务类的成员变量,新建一个Util,对其进行统一管理。
public class ThreadLocalUtils {
private static final ThreadLocal<Map<String,Object>> threadCache = new ThreadLocal<>();
private static void init()