【功能修复】多租户下定时任务结果处理都为失败问题

pull/142/head
YunaiV 2024-09-17 12:04:45 +08:00
parent a739f7e02b
commit 736fc93df5
1 changed files with 11 additions and 10 deletions

View File

@ -17,6 +17,7 @@ import org.aspectj.lang.annotation.Aspect;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* JobHandler AOP * JobHandler AOP
@ -42,28 +43,28 @@ public class TenantJobAspect {
} }
// 逐个租户,执行 Job // 逐个租户,执行 Job
Map<Long, String> success = new ConcurrentHashMap<>(); Map<Long, String> results = new ConcurrentHashMap<>();
Map<Long, String> fail = new ConcurrentHashMap<>(); AtomicBoolean success = new AtomicBoolean(true); // 标记,是否存在失败的情况
tenantIds.parallelStream().forEach(tenantId -> { tenantIds.parallelStream().forEach(tenantId -> {
// TODO 芋艿:先通过 parallel 实现并行1多个租户是一条执行日志2异常的情况 // TODO 芋艿:先通过 parallel 实现并行1多个租户是一条执行日志2异常的情况
TenantUtils.execute(tenantId, () -> { TenantUtils.execute(tenantId, () -> {
try { try {
Object result = joinPoint.proceed(); Object result = joinPoint.proceed();
success.put(tenantId, StrUtil.toStringOrNull(result)); results.put(tenantId, StrUtil.toStringOrNull(result));
} catch (Throwable e) { } catch (Throwable e) {
fail.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); results.put(tenantId, ExceptionUtil.getRootCauseMessage(e));
success.set(false);
// 打印异常 // 打印异常
XxlJobHelper.log(StrUtil.format("[多租户({}) 执行任务({}),发生异常:{}]", XxlJobHelper.log(StrUtil.format("[多租户({}) 执行任务({}),发生异常:{}]",
tenantId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e))); tenantId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e)));
} }
}); });
}); });
// 如果 results 非空,说明发生了异常,标记 XXL-Job 执行失败 // 记录执行结果
if (CollUtil.isNotEmpty(fail)) { if (success.get()) {
XxlJobHelper.handleFail(JsonUtils.toJsonString(fail)); XxlJobHelper.handleSuccess(JsonUtils.toJsonString(results));
} } else {
else { XxlJobHelper.handleFail(JsonUtils.toJsonString(results));
XxlJobHelper.handleSuccess(JsonUtils.toJsonString(success));
} }
} }