一、该问题的重现步骤是什么?
blade-starter-log 中 LogAbstractUtil 的 addRequestInfoToLog 方法这里是无效的,由于在未登录的情况下,AuthUtil的getTenantId 会为空字符串,并不会变成"000000",在这种情况下,如果做blade-log的分库存储并开启全局租户增强的情况下,会导致blade-log 报错
2. blade 配置
tenant:
#多租户增强
enhance: true
#多租户授权保护
license: false
#动态数据源功能
dynamic-datasource: true
#动态数据源全局扫描
dynamic-global: true
#多租户字段名
column: tenant_id
3. blade-log 报错信息
2021-07-31 16:57:21.796 ERROR 33380 --- [ XNIO-1 task-72] o.s.c.l.e.BladeRestExceptionTranslator : 服务器异常
org.springblade.core.tenant.exception.TenantDataSourceException: Incorrect result size: expected 1, actual 0
又细细琢磨了一下,找到原来是这里报的错,但是我已经开启了 NonDS为啥还是会去找一下tenantId 呢? 登录这个接口是没有tenantId的,当然会出错
也同样指定的数据库
目前我找到的解法是,单独给blade-log下方一个配置(blade-log.yaml)中设置不启用租户
二、你期待的结果是什么?实际看到的又是什么?
正确的保存登录日志
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
bladeX 2.8.0
blade-log 2.8.0
bladex-boot cloud 2.8.0
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
换用toStrWithEmpty方法,这样可以判断到空字符串的情况,然后给他设置默认租户
多租户数据源切换有两个逻辑,一个是注解切换,用的就是@DS来指定。另一个是全局切换,自动匹配,如果要排除用的是@NonDS。
你两个都用了,则两套逻辑都会执行,所以在DS的逻辑内是会判断租户ID的
那这里的意思是,如果使用的@NonDs取消了多租户数据,就只能使用master数据源(或者说是指定的默认数据源),没法使用@DS来切换数据库了,是么?
我尝试找了一下原因是因为这个 TenantDataSourceAnnotationInterceptor 继承了 DynamicDataSourceAnnotationInterceptor 方法
然后一定重写了数据源... 这个就坑大发了
扫一扫访问 Blade技术社区 移动端