diff --git a/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java b/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java new file mode 100644 index 0000000..eb69dfa --- /dev/null +++ b/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java @@ -0,0 +1,42 @@ +package cn.axzo.pokonyan.util; + +import org.slf4j.MDC; + +import java.util.function.Supplier; + +/** + * 封装Supplier + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/11/13 15:47 + */ +public class TraceSupplier implements Supplier { + + private static final String CTX_LOG_ID = "ctxLogId"; + + private String traceId; + + private Supplier supplier; + + private TraceSupplier() {} + + + @Override + public T get() { + MDC.put(CTX_LOG_ID, this.traceId); + try { + return supplier.get(); + } finally { + MDC.remove(CTX_LOG_ID); + } + } + + public static TraceSupplier create(Supplier supplier) { + TraceSupplier traceSupplier = new TraceSupplier<>(); + traceSupplier.supplier = supplier; + traceSupplier.traceId = MDC.get(CTX_LOG_ID); + return traceSupplier; + } + +}