TenantDataSourceAnnotationInterceptor优化建议

Blade 未结 1 962
56956808
56956808 剑圣 2022-02-18 09:34

bladex多数据源跟租户绑定,使得想直接使用@DS注解,还需要考虑租户的数据源。

很多情况下,只是为了多数据源而使用@DS,

比如:

  1. 同时有多个不同的数据库的业务库或单租户也有需要使用多数据源的时候

  2. 第三方接口调用放行api,再不登录的情况下。

优化如下:

忽略租户,也应该忽略租户的动态数据源。

image.png


使用方法:

@TenantIgnore

A.service(){

B.service();

C.service();

}


@DS(db1)

B.service(){};


@DS(db2)

C.service(){};


或者写一个关闭bladex多数据源的注解和线程变量,能够直接使用@DS

1条回答
  • 2022-02-19 22:32

    开启多数据源的时候,是不强制开启租户多数据源的。具体可以参考blade-biz的blade-demo工程。

    主要注意点就是在LauncherService内增加这段配置

    image.png



    另外@TenantIgnore是不能去控制租户数据源的,这个注解仅仅只用于控制tenant_id的读取与写入,如果你要在开启了多租户数据源的同时,关闭特定的数据源切换,有专门的@NonDS注解,用了他之后就只会走master库了,具体文档有说明。

    PS:你把一个注解同时赋予两种功能,更容易引发冲突的场景,所以是必须分成两个注解来控制的,这样可以灵活搭配。你可以把@NonDS看作是数据库隔离层面的排除,而@TenantIgnore是数据库字段隔离层面的排除。

    image.png

    作者追问:2022-02-20 16:47

    开启租户多数据源的情况下,@TenantIgnore当前线程既然忽略了多租户,也应该去掉用租户拿数据源的情况。正如不需要token的api,没有租户id,@DS就会报找不到数据源。@TenantIgnore来配合handleDataSource,还能解决已绑定某些业务,一租户,多数据源的场景。而目前handleDataSource是强制按tenantId来找数据源的。

    作者追问:2022-02-20 16:47

    @TenantIgnore这个注解在demo里面没有找到,有没有示例,用在哪些方面

    0 讨论(0)
提交回复