mirror of
https://github.com/hpd840321/starRiverProperty.git
synced 2026-06-09 08:20:31 +08:00
elevator(P1): bounded parallel delete, listFloor page, bind; Feign callWithContext
Made-with: Cursor
Former-commit-id: fe571aaadc
This commit is contained in:
+19
@@ -5,6 +5,7 @@ import cn.cloudwalk.cloud.session.extend.DefaultExtendContext;
|
||||
import cn.cloudwalk.elevator.context.CloudWalkExtendContextValue;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -76,4 +77,22 @@ public class FeignThreadLocalUtil {
|
||||
public static void setRequestHeader(CloudwalkCallContext context) {
|
||||
set(getDefaultRequestHeader(context));
|
||||
}
|
||||
|
||||
/**
|
||||
* 在有界线程池等子线程中调用 Feign 前,必须为当前线程设置与 {@code context} 一致的请求头 ThreadLocal;
|
||||
* 调用结束后恢复/清理,避免池化线程泄漏或串扰。
|
||||
*/
|
||||
public static <T> T callWithContext(CloudwalkCallContext context, Callable<T> action) throws Exception {
|
||||
Map<String, String> previous = get();
|
||||
try {
|
||||
setRequestHeader(context);
|
||||
return action.call();
|
||||
} finally {
|
||||
if (previous != null) {
|
||||
set(previous);
|
||||
} else {
|
||||
remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user