定时任务中切换私有数据源

Blade 已结 2 3257
风清扬
风清扬 剑童 2021-05-04 18:13

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

  1. 定时任务中切换私有数据源;官方提供的两种注解方式都尝试过了。

image.png

image.png

image.png

image.png


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

在定时任务中,能正确切换到对应租户的数据源中

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

商业版:2.6.0

开发环境中win10系统

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

未能正确切换数据源

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

看顶层源码中的这种方法能正常切换过去,但担心会遇到一些未知的问题(比如并发等),请求作者帮忙解答下。

image.png

image.png

2条回答
  •  admin
    admin (最佳回答者)
    2021-05-06 10:36

    bladex自带的多租户数据源切换是强制要求要有token才行,而token需要有正常的request才能携带。

    所以定时任务、多线程这一类异步请求就取不到了,不能封装的注解直接切换。

    如果时定时任务场景,需要使用 DynamicDataSourceContextHolder.push 来手动切换租户,当然这个是用本地线程实现的,理论上不会有并发的问题,如果超高并发遇到问题,要么给mybatis-plus发issue,要么只能自己动手改造提高他的并发能力

    image.png

    0 讨论(2)
  • 2021-05-14 18:18

    麻烦问一下,如果开启多线程切换数据源,会不会参数数据错乱。

    作者追问:2021-05-15 14:01

    多数据源底层用的是mybatis-plus官方的组件 dynamic-datasource,不会有问题的

    0 讨论(0)
提交回复