多线程编程ThreadLocal数据传递问题

现象

线上bug,预约状态展示问题,用户点击预约后再次刷新又展示预约按钮。

原因

由于处于首页,接口访问服务器后请求各种数据是以多线程的形式执行,获取用户预约状态需要根据用户accountId去查库,accountId由底层方法实现在Request请求对象的Header中,而子线程无请求的attributes数据,故获取预约状态失败。

解决办法

开启异步线程时将父线程ThreadLocal中的数据传递至子线程


// 获取父线程ThreadLocal的数据,传递至子线程中

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

CompletableFuture future = CompletableFuture.runAsync(() -> {

 RequestContextHolder.setRequestAttributes(attributes);

 // 子线程要处理的业务代码

 ······

});
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论

古乃特

Java Developer

不积跬步无以至千里~

最新文章

Docker 入门详解

2024年2月29日

Docker 入门详解 初识docker...

Linux使用记录

2024年2月29日

Linux 25.8K 开源的 Linu...

gRPC框架学习记录

2024年2月29日

gRPC首次使用问题 报错信息1: 造成...

多线程间ThreadLocal数据传递

2024年2月29日

多线程编程ThreadLocal数据传递...

世界,您好!

2023年9月13日

欢迎使用WordPress。这是您的第一...

All Rights Reserved. 版权所有 © 2024 古乃特

黔ICP备2024019367号
0
希望看到您的想法,请您发表评论x
滚动至顶部