feat(sj_1.1.0-beta2): 优化threadLocal
This commit is contained in:
parent
ada349a88f
commit
aea6906b55
@ -0,0 +1,9 @@
|
||||
package com.aizuda.snailjob.client.common;
|
||||
|
||||
/**
|
||||
* @author: opensnail
|
||||
* @date : 2024-03-22
|
||||
* @since : sj_1.1.0
|
||||
*/
|
||||
public interface SnailJobContextThreadLocal<T> extends SnailThreadLocal<T> {
|
||||
}
|
@ -5,12 +5,5 @@ package com.aizuda.snailjob.client.common;
|
||||
* @date : 2024-03-22
|
||||
* @since :3.2.0
|
||||
*/
|
||||
public interface SnailLogContext<T> {
|
||||
|
||||
void set(T value);
|
||||
|
||||
void remove();
|
||||
|
||||
T get();
|
||||
|
||||
public interface SnailJobLogThreadLocal<T> extends SnailThreadLocal<T> {
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.aizuda.snailjob.client.common;
|
||||
|
||||
/**
|
||||
* @author: opensnail
|
||||
* @date : 2024-06-27
|
||||
* @since : sj_1.1.0
|
||||
*/
|
||||
public interface SnailThreadLocal<T> {
|
||||
|
||||
void set(T value);
|
||||
|
||||
void remove();
|
||||
|
||||
T get();
|
||||
|
||||
}
|
@ -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<LogTypeEnum> LOG_TYPE = snailJobLogContextLoader();
|
||||
private static final SnailLogContext<LogMeta> LOG_META = snailJobLogContextLoader();
|
||||
private static final SnailThreadLocal<LogTypeEnum> LOG_TYPE = snailJobLogContextLoader();
|
||||
private static final SnailThreadLocal<LogMeta> LOG_META = snailJobLogContextLoader();
|
||||
|
||||
private static <T> SnailLogContext<T> snailJobLogContextLoader() {
|
||||
return Optional.ofNullable(ServiceLoaderUtil.loadFirst(SnailLogContext.class)).orElse(new ThreadLocalLogContext<T>(new ThreadLocal<>()));
|
||||
private static <T> SnailThreadLocal<T> snailJobLogContextLoader() {
|
||||
SnailThreadLocal<T> snailThreadLocal = ServiceLoaderUtil.loadFirst(SnailJobLogThreadLocal.class);
|
||||
if (Objects.isNull(snailThreadLocal)) {
|
||||
snailThreadLocal = new CommonThreadLocal<>(new ThreadLocal<>());
|
||||
}
|
||||
return snailThreadLocal;
|
||||
}
|
||||
|
||||
private SnailJobLogManager() {
|
||||
|
@ -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<T> implements SnailLogContext<T> {
|
||||
public class CommonThreadLocal<T> implements SnailThreadLocal<T> {
|
||||
|
||||
private final ThreadLocal<T> threadLocal;
|
||||
|
||||
public ThreadLocalLogContext(ThreadLocal<T> threadLocal) {
|
||||
public CommonThreadLocal(ThreadLocal<T> threadLocal) {
|
||||
Assert.notNull(threadLocal, () -> new SnailJobClientException("thread local can not be null"));
|
||||
this.threadLocal = threadLocal;
|
||||
}
|
@ -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<JobContext> JOB_CONTEXT_LOCAL = new ThreadLocal<>();
|
||||
private static final SnailThreadLocal<JobContext> JOB_CONTEXT_LOCAL = initThreadLocal();
|
||||
private static SnailThreadLocal<JobContext> initThreadLocal() {
|
||||
SnailThreadLocal<JobContext> 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);
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user