From 736fc93df561998ca5012fda6c9c4ca80bcd933d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 17 Sep 2024 12:04:45 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E3=80=91=E5=A4=9A=E7=A7=9F=E6=88=B7=E4=B8=8B=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BB=93=E6=9E=9C=E5=A4=84=E7=90=86=E9=83=BD?= =?UTF-8?q?=E4=B8=BA=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tenant/core/job/TenantJobAspect.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java index 61efa15a5..d2ae112ca 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java @@ -17,6 +17,7 @@ import org.aspectj.lang.annotation.Aspect; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; /** * 多租户 JobHandler AOP @@ -42,28 +43,28 @@ public class TenantJobAspect { } // 逐个租户,执行 Job - Map success = new ConcurrentHashMap<>(); - Map fail = new ConcurrentHashMap<>(); + Map results = new ConcurrentHashMap<>(); + AtomicBoolean success = new AtomicBoolean(true); // 标记,是否存在失败的情况 tenantIds.parallelStream().forEach(tenantId -> { // TODO 芋艿:先通过 parallel 实现并行;1)多个租户,是一条执行日志;2)异常的情况 TenantUtils.execute(tenantId, () -> { try { Object result = joinPoint.proceed(); - success.put(tenantId, StrUtil.toStringOrNull(result)); + results.put(tenantId, StrUtil.toStringOrNull(result)); } catch (Throwable e) { - fail.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); + results.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); + success.set(false); // 打印异常 XxlJobHelper.log(StrUtil.format("[多租户({}) 执行任务({}),发生异常:{}]", tenantId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e))); } }); }); - // 如果 results 非空,说明发生了异常,标记 XXL-Job 执行失败 - if (CollUtil.isNotEmpty(fail)) { - XxlJobHelper.handleFail(JsonUtils.toJsonString(fail)); - } - else { - XxlJobHelper.handleSuccess(JsonUtils.toJsonString(success)); + // 记录执行结果 + if (success.get()) { + XxlJobHelper.handleSuccess(JsonUtils.toJsonString(results)); + } else { + XxlJobHelper.handleFail(JsonUtils.toJsonString(results)); } }