package com.qianwen.core.context;
|
|
import java.util.Map;
|
import java.util.concurrent.Callable;
|
import org.slf4j.MDC;
|
import com.qianwen.core.tool.utils.ThreadLocalUtil;
|
import org.springframework.lang.Nullable;
|
|
/* loaded from: blade-core-context-9.3.0.0-SNAPSHOT.jar:org/springblade/core/context/BladeCallableWrapper.class */
|
public class BladeCallableWrapper<V> implements Callable<V> {
|
private final Callable<V> delegate;
|
private final Map<String, Object> tlMap = ThreadLocalUtil.getAll();
|
@Nullable
|
private final Map<String, String> mdcMap = MDC.getCopyOfContextMap();
|
|
public BladeCallableWrapper(Callable<V> callable) {
|
this.delegate = callable;
|
}
|
|
@Override // java.util.concurrent.Callable
|
public V call() throws Exception {
|
if (!this.tlMap.isEmpty()) {
|
ThreadLocalUtil.put(this.tlMap);
|
}
|
if (this.mdcMap != null && !this.mdcMap.isEmpty()) {
|
MDC.setContextMap(this.mdcMap);
|
}
|
try {
|
return this.delegate.call();
|
} finally {
|
this.tlMap.clear();
|
if (this.mdcMap != null) {
|
this.mdcMap.clear();
|
}
|
ThreadLocalUtil.clear();
|
MDC.clear();
|
}
|
}
|
}
|