From aea6906b55739aa4189a15abfcb9064f3fd870b6 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Thu, 27 Jun 2024 15:00:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.1.0-beta2):=20=E4=BC=98=E5=8C=96thr?= =?UTF-8?q?eadLocal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/SnailJobContextThreadLocal.java | 9 +++++++++ ...ontext.java => SnailJobLogThreadLocal.java} | 9 +-------- .../client/common/SnailThreadLocal.java | 16 ++++++++++++++++ .../common/log/support/SnailJobLogManager.java | 18 ++++++++++++------ .../CommonThreadLocal.java} | 14 +++++++------- .../job/core/executor/JobContextManager.java | 16 +++++++++++++++- .../job/core/executor/MapInvokeHandler.java | 3 +++ 7 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobContextThreadLocal.java rename snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/{SnailLogContext.java => SnailJobLogThreadLocal.java} (54%) create mode 100644 snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailThreadLocal.java rename snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/{log/context/ThreadLocalLogContext.java => threadlocal/CommonThreadLocal.java} (65%) diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobContextThreadLocal.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobContextThreadLocal.java new file mode 100644 index 000000000..2b4615e3e --- /dev/null +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobContextThreadLocal.java @@ -0,0 +1,9 @@ +package com.aizuda.snailjob.client.common; + +/** + * @author: opensnail + * @date : 2024-03-22 + * @since : sj_1.1.0 + */ +public interface SnailJobContextThreadLocal extends SnailThreadLocal { +} diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailLogContext.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobLogThreadLocal.java similarity index 54% rename from snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailLogContext.java rename to snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobLogThreadLocal.java index 7df52b5c4..3821694fe 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailLogContext.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailJobLogThreadLocal.java @@ -5,12 +5,5 @@ package com.aizuda.snailjob.client.common; * @date : 2024-03-22 * @since :3.2.0 */ -public interface SnailLogContext { - - void set(T value); - - void remove(); - - T get(); - +public interface SnailJobLogThreadLocal extends SnailThreadLocal { } diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailThreadLocal.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailThreadLocal.java new file mode 100644 index 000000000..8772d222e --- /dev/null +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/SnailThreadLocal.java @@ -0,0 +1,16 @@ +package com.aizuda.snailjob.client.common; + +/** + * @author: opensnail + * @date : 2024-06-27 + * @since : sj_1.1.0 + */ +public interface SnailThreadLocal { + + void set(T value); + + void remove(); + + T get(); + +} diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/support/SnailJobLogManager.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/support/SnailJobLogManager.java index 8c1f9f6d3..d4dee0247 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/support/SnailJobLogManager.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/support/SnailJobLogManager.java @@ -1,11 +1,13 @@ package com.aizuda.snailjob.client.common.log.support; import cn.hutool.core.util.ServiceLoaderUtil; -import com.aizuda.snailjob.client.common.SnailLogContext; -import com.aizuda.snailjob.client.common.log.context.ThreadLocalLogContext; +import com.aizuda.snailjob.client.common.SnailJobLogThreadLocal; +import com.aizuda.snailjob.client.common.SnailThreadLocal; import com.aizuda.snailjob.client.common.log.report.LogMeta; +import com.aizuda.snailjob.client.common.threadlocal.CommonThreadLocal; import com.aizuda.snailjob.common.log.enums.LogTypeEnum; +import java.util.Objects; import java.util.Optional; /** @@ -15,11 +17,15 @@ import java.util.Optional; */ public final class SnailJobLogManager { - private static final SnailLogContext LOG_TYPE = snailJobLogContextLoader(); - private static final SnailLogContext LOG_META = snailJobLogContextLoader(); + private static final SnailThreadLocal LOG_TYPE = snailJobLogContextLoader(); + private static final SnailThreadLocal LOG_META = snailJobLogContextLoader(); - private static SnailLogContext snailJobLogContextLoader() { - return Optional.ofNullable(ServiceLoaderUtil.loadFirst(SnailLogContext.class)).orElse(new ThreadLocalLogContext(new ThreadLocal<>())); + private static SnailThreadLocal snailJobLogContextLoader() { + SnailThreadLocal snailThreadLocal = ServiceLoaderUtil.loadFirst(SnailJobLogThreadLocal.class); + if (Objects.isNull(snailThreadLocal)) { + snailThreadLocal = new CommonThreadLocal<>(new ThreadLocal<>()); + } + return snailThreadLocal; } private SnailJobLogManager() { diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/context/ThreadLocalLogContext.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/threadlocal/CommonThreadLocal.java similarity index 65% rename from snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/context/ThreadLocalLogContext.java rename to snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/threadlocal/CommonThreadLocal.java index 0b89dc60e..fe0baf0b8 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/context/ThreadLocalLogContext.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/threadlocal/CommonThreadLocal.java @@ -1,21 +1,21 @@ -package com.aizuda.snailjob.client.common.log.context; +package com.aizuda.snailjob.client.common.threadlocal; import cn.hutool.core.lang.Assert; -import com.aizuda.snailjob.client.common.SnailLogContext; +import com.aizuda.snailjob.client.common.SnailThreadLocal; import com.aizuda.snailjob.client.common.exception.SnailJobClientException; /** * ThreadLocal实现类 * - * @author: xiaowoniu - * @date : 2023-08-09 16:34 - * @since 3.2.0 + * @author: opensnail + * @date : 2024-06-27 + * @since sj_1.1.0 */ -public class ThreadLocalLogContext implements SnailLogContext { +public class CommonThreadLocal implements SnailThreadLocal { private final ThreadLocal threadLocal; - public ThreadLocalLogContext(ThreadLocal threadLocal) { + public CommonThreadLocal(ThreadLocal threadLocal) { Assert.notNull(threadLocal, () -> new SnailJobClientException("thread local can not be null")); this.threadLocal = threadLocal; } diff --git a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobContextManager.java b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobContextManager.java index 0749f027b..9e61aa174 100644 --- a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobContextManager.java +++ b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobContextManager.java @@ -1,15 +1,29 @@ package com.aizuda.snailjob.client.job.core.executor; +import cn.hutool.core.util.ServiceLoaderUtil; +import com.aizuda.snailjob.client.common.SnailJobLogThreadLocal; +import com.aizuda.snailjob.client.common.SnailThreadLocal; +import com.aizuda.snailjob.client.common.threadlocal.CommonThreadLocal; import com.aizuda.snailjob.common.core.model.JobContext; +import java.util.Objects; + /** * @author: opensnail * @date : 2024-06-13 * @since : sj_1.1.0 */ public final class JobContextManager { + private JobContextManager() {} - private static final ThreadLocal JOB_CONTEXT_LOCAL = new ThreadLocal<>(); + private static final SnailThreadLocal JOB_CONTEXT_LOCAL = initThreadLocal(); + private static SnailThreadLocal initThreadLocal() { + SnailThreadLocal snailThreadLocal = ServiceLoaderUtil.loadFirst(SnailJobLogThreadLocal.class); + if (Objects.isNull(snailThreadLocal)) { + snailThreadLocal = new CommonThreadLocal<>(new ThreadLocal<>()); + } + return snailThreadLocal; + } public static void setJobContext(JobContext jobContext) { JOB_CONTEXT_LOCAL.set(jobContext); diff --git a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java index 4787a8271..01f11e4d1 100644 --- a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java +++ b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.client.job.core.executor; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.client.common.rpc.client.RequestBuilder; import com.aizuda.snailjob.client.job.core.client.JobNettyClient; @@ -60,7 +61,9 @@ public final class MapInvokeHandler implements InvocationHandler { throw new SnailJobMapReduceException("The Next taskName can not be {}", SystemConstants.MAP_ROOT); } + // 使用ThreadLocal传递数据 JobContext jobContext = JobContextManager.getJobContext(); + Assert.notNull(jobContext, () -> new SnailJobMapReduceException("job context is null")); // 1. 构造请求 MapTaskRequest mapTaskRequest = new MapTaskRequest();