一、该问题的重现步骤是什么?
1. 在接口中使用了并行请求外部接口
2.
3. 数据之间并无强依赖性, 所以使用并行获取, 通过异步线程+CountDownLatch+Future实现,但是发现tenantId失效了,取到的都是空
二、你期待的结果是什么?实际看到的又是什么?
sql应自动加上tenantId,实际上tenantId都为空,程序不会报错,只是数据处理因为没有tenantId,不会正确处理
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
AuthUtil.getTenantId内部是基于request来获取的。在线程内无法获取request,那自然就返回空了。
如果需要的话你可以在方法外先获取tenantId,然后以传参的方式传入方法供使用
这个是否有办法改造一下,还是只有在外部获取tenantId这一种方式
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.(); RequestContextHolder.setRequestAttributes(sra, true);
网上找的一种方式,在开启
将RequestAttributes对象设置为子线程共享 实测可行,但是不知道有没有什么其它问题
扫一扫访问 Blade技术社区 移动端