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(); + } +}