From d923649a8da38fa91c528659b7592dcc6ff9c3c8 Mon Sep 17 00:00:00 2001 From: wanghu Date: Fri, 21 Aug 2026 00:50:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/SyncLogRetryContext.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/yunhai/bschclassmanage/utils/SyncLogRetryContext.java diff --git a/src/main/java/com/yunhai/bschclassmanage/utils/SyncLogRetryContext.java b/src/main/java/com/yunhai/bschclassmanage/utils/SyncLogRetryContext.java new file mode 100644 index 0000000..8273519 --- /dev/null +++ b/src/main/java/com/yunhai/bschclassmanage/utils/SyncLogRetryContext.java @@ -0,0 +1,29 @@ +package com.yunhai.bschclassmanage.utils; + +/** + * 同步日志「重试」标记上下文。 + * retry() 通过 Spring 代理重放原始调用时会再次触发 SyncLogAspect 生成一条新的同步日志, + * 用 ThreadLocal 把「本次调用是重试」这一信号透传给切面,切面据此在同步类型名上追加"(重试)"。 + */ +public final class SyncLogRetryContext { + + private static final ThreadLocal RETRY = new ThreadLocal<>(); + + private SyncLogRetryContext() { + } + + /** 标记当前线程的下一次同步调用为重试 */ + public static void mark() { + RETRY.set(Boolean.TRUE); + } + + /** 当前线程的同步调用是否为重试 */ + public static boolean isRetry() { + return Boolean.TRUE.equals(RETRY.get()); + } + + /** 清除标记(务必在 finally 中调用,避免线程池复用导致标记泄漏) */ + public static void clear() { + RETRY.remove(); + } +}