diff --git a/fastbee-common/src/main/java/com/fastbee/common/utils/TraceIdUtils.java b/fastbee-common/src/main/java/com/fastbee/common/utils/TraceIdUtils.java index 558a4223..c05442f7 100644 --- a/fastbee-common/src/main/java/com/fastbee/common/utils/TraceIdUtils.java +++ b/fastbee-common/src/main/java/com/fastbee/common/utils/TraceIdUtils.java @@ -10,7 +10,7 @@ import java.util.concurrent.Callable; * 提供向后兼容的 API,内部委托给 TraceContext * * @author Sumuxi - * @deprecated 建议直接使用 {@link TraceContext} + * 建议直接使用 {@link TraceContext} */ public class TraceIdUtils { diff --git a/fastbee-framework/src/main/java/com/fastbee/framework/manager/AsyncManager.java b/fastbee-framework/src/main/java/com/fastbee/framework/manager/AsyncManager.java index 7fe96dcd..5d18fff9 100644 --- a/fastbee-framework/src/main/java/com/fastbee/framework/manager/AsyncManager.java +++ b/fastbee-framework/src/main/java/com/fastbee/framework/manager/AsyncManager.java @@ -1,6 +1,7 @@ package com.fastbee.framework.manager; import com.fastbee.common.utils.Threads; +import com.fastbee.common.utils.TraceIdUtils; import com.fastbee.common.utils.spring.SpringUtils; import java.util.TimerTask; @@ -36,10 +37,17 @@ public class AsyncManager { /** * 执行任务 * + *

包装任务以透传 TraceId:{@code scheduledExecutorService} 是裸 + * {@link java.util.concurrent.ScheduledThreadPoolExecutor},不支持 + * {@code setTaskDecorator},因此必须在提交点包装任务本身。 + * {@link TraceIdUtils#wrapWithMdc} 会捕获调用方线程的 TraceContext + * 快照并在 schedule-pool 线程内恢复,使登录/登出/操作日志等 + * 异步落库链路的日志携带同一 TraceId。 + * * @param task 任务 */ public void execute(TimerTask task) { - executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + executor.schedule(TraceIdUtils.wrapWithMdc(task), OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); } /** diff --git a/fastbee-server/sip-server/src/main/java/com/fastbee/sip/conf/ThreadPoolTaskConfig.java b/fastbee-server/sip-server/src/main/java/com/fastbee/sip/conf/ThreadPoolTaskConfig.java index ac8d78ab..a07e51a7 100644 --- a/fastbee-server/sip-server/src/main/java/com/fastbee/sip/conf/ThreadPoolTaskConfig.java +++ b/fastbee-server/sip-server/src/main/java/com/fastbee/sip/conf/ThreadPoolTaskConfig.java @@ -1,5 +1,6 @@ package com.fastbee.sip.conf; +import com.fastbee.common.trace.MdcTaskDecorator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; @@ -26,6 +27,8 @@ public class ThreadPoolTaskConfig { executor.setKeepAliveSeconds(keepAliveTime); executor.setThreadNamePrefix(threadNamePrefix); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 配置 TaskDecorator,自动传播 TraceId + executor.setTaskDecorator(new MdcTaskDecorator()); executor.initialize(); return executor; }