一、该问题的重现步骤是什么?
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 tenantIds = tenantFrameworkService.getTenantIds();
if (CollUtil.isEmpty(tenantIds)) {
return null;
}
// 逐个租户,执行 Job
Map 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技术社区 移动端