重新线程池
提交线程任务的方法改造为
@Override
public <T> Future<T> submit(Runnable task, T result) {
return super.submit(ThreadMdcUtil.wrap(task, MDC.getCopyOfContextMap()), result);
}
public static <T> Callable<T> wrap(final Callable<T> callable, final Map<String, String> context) {
return () -> {
if (context == null) {
MDC.clear();
} else {
MDC.setContextMap(context);
}
setTraceIdIfAbsent();
try {
return callable.call();
} finally {
MDC.clear();
}
};
}
这样线程池里面的线程运行当前任务的时候,会将父线程的context带过来;这样就实现了context共享的效果。traceId也就不会丢失
622



被折叠的 条评论
为什么被折叠?



