使用ThreadLocal线程池,在同一线程中,获取上下文信息的方法

第一步:定义工具类,将需要的信息写入线程池,本例将session中的usrid放入线程池

package com.itheima.reggie.common;

/**
 * Created with IntelliJ IDEA.
 * User: Hzy
 * Date: 2022/4/13
 * Time: 15:14
 */

/**
 * 基于ThreadLocal封装的工具类,用于保存和获取当前登录用户的id
 */
public class BaseContext {
    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置值
     * @param id
     */
    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }

    /**
     * 获取值
     * @return
     */
    public static Long getCurrentId(){
        return threadLocal.get();
    }

}

第二步,在能够获取session的地方(比如自定义的登陆拦截器,或者Controller中),调用

BaseContext.setCurrentId(empId);
Long empId = (Long) request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);

第三步,在需要使用session中userid的地方,调用BaseContext.getCurrentId();

三个步骤必须确保在同一线程ID上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值