一、该问题的重现步骤是什么?
xxl-job定时器任务,怎么设置 token,现象
@XxlJob("asyncReceivingSendInspection") public void asyncReceivingSendInspection()
数据库操作查询时,没有拼接租户
二、你期待的结果是什么?实际看到的又是什么?
怎么实现定时器查询等操作时,拼接上租户信息,因为有多租户,定时任务,无法数据隔离,我看bladex-tool也没有封装此块解决方案
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
BladeX-Tool org.springblade2.9.0.RELEASE
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
我们公司买的项目版本啊。请帮忙给予支持
可以写个TenantJob注解,然后写个AOP拦截该注解执行任务,任务执行时,会按照租户逐个设置租户id执行 Job 的逻辑。
@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface TenantJob { }
@Aspect @RequiredArgsConstructor @Slf4j public class TenantJobAspect { private final TenantFrameworkService tenantFrameworkService; @Around("@annotation(tenantJob)") public String around(ProceedingJoinPoint joinPoint, TenantJob tenantJob) { // 获得租户列表 List<Long> tenantIds = tenantFrameworkService.getTenantIds(); if (CollUtil.isEmpty(tenantIds)) { return null; } // 逐个租户,执行 Job Map<Long, String> results = new ConcurrentHashMap<>(); tenantIds.parallelStream().forEach(tenantId -> { TenantUtils.execute(tenantId, () -> { try { joinPoint.proceed(); } catch (Throwable e) { results.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); } }); }); return JsonUtils.toJsonString(results); } }
感谢回复
扫一扫访问 Blade技术社区 移动端