文档章节

如何在async线程中访问RequestContextHolder

go4it
 go4it
发布于 2017/06/01 23:21
字数 137
阅读 26
收藏 1

##callable包装

public class ContextAwareCallable<T> implements Callable<T> {
    private Callable<T> task;
    private RequestAttributes context;

    public ContextAwareCallable(Callable<T> task, RequestAttributes context) {
        this.task = task;
        this.context = context;
    }

    @Override
    public T call() throws Exception {
        if (context != null) {
            RequestContextHolder.setRequestAttributes(context);
        }

        try {
            return task.call();
        } finally {
            RequestContextHolder.resetRequestAttributes();
        }
    }
}

##threadpool包装

public class ContextAwarePoolExecutor extends ThreadPoolTaskExecutor {
    @Override
    public <T> Future<T> submit(Callable<T> task) {
        return super.submit(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes()));
    }

    @Override
    public <T> ListenableFuture<T> submitListenable(Callable<T> task) {
        return super.submitListenable(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes()));
    }
}

##异步线程配置

@Configuration
public class ExecutorConfig extends AsyncConfigurerSupport {
    @Override
    @Bean
    public Executor getAsyncExecutor() {
        return new ContextAwarePoolExecutor();
    }
}

##doc


想获取最新资讯,请关注微信公众号

输入图片说明

© 著作权归作者所有

共有 人打赏支持
go4it
粉丝 64
博文 740
码字总数 533483
作品 0
深圳
通过RequestContextHolder直接获取HttpServletRequest对象

问题 朋友遇到一个问题:他想在Service方法中使用的API,但是又不想把对象当作这个Service方法的参数传过来,原因是这个方法被N多Controller调用,加一个参数就得改一堆代码。一句话:就是他...

胡桃同学
2016/12/07
54
0
子线程使用父线程RequestScope作用域Bean问题的探究

一、前言 最近我们组在做项目分层模块化项目调研,同组通元童鞋在调研ajdk8的多租户方案需要对每一个请求开启一个线程进行处理,然后就产生一个问题如何在开启的线程中不破坏使用习惯情况下使...

加多
06/04
0
0
Spring MVC 4 获取 Request 和 Reponse 对象方法

这里主要说一下在非Controller层中如何获取Response对象的方法,之前在项目开发过程中,第三方类库需要用到Response对象,于是度娘寻找如何获取该对象,有以下几种方式都不行,没有去查源码,...

华山猛男
2016/12/20
58
0
Java并发编程之ThreadLocal源码分析

多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,多线程访问同一个共享变量特别容易出现并发问题,特别是多个线程需要对一个...

狂小白
06/03
0
0
c# 实现Actor模式的游戏服务器,参考Skynet机制

0:讨论群 qq群号:390313628 unity 4.6 版本运行 参考 服务器代码:http://git.oschina.net/liyonghelpme/GameServerCsharp 参考文献:http://twistedoakstudios.com/blog/Post2061_emulat......

李勇2
2015/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

05-《深度拆解Java虚拟机》之JVM是如何执行方法调用的?(下)

一、问题引入 我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以作者就想在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文...

飞鱼说编程
9分钟前
0
0
nginx统一入口 多服务出口

nginx配置多ip和端口统一调用入口log_format中$upstream_addr 标识打印转发的url地址配置upstream和locationhttp {include mime.types;default_type application/octet-stream...

GoldenVein
11分钟前
0
0
阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站无法正常访问的情况...

我是你大哥
13分钟前
0
0
华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!

还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线...

华为终端开放实验室
15分钟前
0
0
聊聊redisson的RMap的computeIfAbsent操作

序 本文主要研究一下redisson的RMap的computeIfAbsent操作 实例 @Test public void testRMapComputeIfAbsent(){ Config config = new Config(); config.useSingleS......

go4it
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部