并行执行任务,无法获取tenantId

Blade 未结 1 977
18695658335
18695658335 剑者 2021-01-28 00:46
悬赏:10

一、该问题的重现步骤是什么?

1. 在接口中使用了并行请求外部接口

2. image.png

3. 数据之间并无强依赖性, 所以使用并行获取, 通过异步线程+CountDownLatch+Future实现,但是发现tenantId失效了,取到的都是空

image.png


二、你期待的结果是什么?实际看到的又是什么?

sql应自动加上tenantId,实际上tenantId都为空,程序不会报错,只是数据处理因为没有tenantId,不会正确处理

三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 2021-01-28 11:54

    AuthUtil.getTenantId内部是基于request来获取的。在线程内无法获取request,那自然就返回空了。

    如果需要的话你可以在方法外先获取tenantId,然后以传参的方式传入方法供使用

    作者追问:2021-02-07 16:13

    这个是否有办法改造一下,还是只有在外部获取tenantId这一种方式

    作者追问:2021-02-07 16:32

    ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.();
    RequestContextHolder.setRequestAttributes(sra, true);

    网上找的一种方式,在开启

    将RequestAttributes对象设置为子线程共享
    实测可行,但是不知道有没有什么其它问题


    2 讨论(0)
提交回复