前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >子线程中获取request

子线程中获取request

作者头像
阿超
发布2022-08-21 11:17:01
1.9K0
发布2022-08-21 11:17:01
举报
文章被收录于专栏:快乐阿超快乐阿超

写一个接口,用于测试:

代码语言:javascript
复制
import cn.hutool.core.thread.AsyncUtil;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.CompletableFuture;


@RestController
@RequestMapping("test")
public class TestController {

	@Resource
    private HttpServletRequest request;
	
	@GetMapping("request")
    public String request() {
        AsyncUtil.get(CompletableFuture.runAsync(() -> {
            String id = request.getParameter("id");
            System.out.println(id);
        }));
        AsyncUtil.get(CompletableFuture.runAsync(() -> {
            String id = request.getParameter("id");
            System.out.println(id);
        }));
        return "";
    }
}

我们请求一下

image-20220118160548784
image-20220118160548784

发现抛出了异常

image-20220118160326487
image-20220118160326487

我们在第一行加上这行代码:

代码语言:javascript
复制
RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);

成功获取

image-20220118160501199
image-20220118160501199

尝试将这行代码放入拦截器,也成功生效

image-20220118160710865
image-20220118160710865

这是因为源码中,如果我们传入inheritabletrue,则在NamedInheritableThreadLocal中设置值

该类继承了InheritableThreadLocal,因此可以在子线程共享变量

image-20220118160902067
image-20220118160902067
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档