Commit d30700d06003ed72dfed27b547ad2544f088c2ee

Authored by YunaiV
1 parent 1f35ef59

【修复】微信支付时,无法保证父线程的 ThreadLocal 传入子线程

yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/cache/CacheUtils.java
... ... @@ -7,6 +7,7 @@ import com.google.common.cache.LoadingCache;
7 7  
8 8 import java.time.Duration;
9 9 import java.util.concurrent.Executor;
  10 +import java.util.concurrent.ExecutorService;
10 11 import java.util.concurrent.Executors;
11 12  
12 13 /**
... ... @@ -17,8 +18,11 @@ import java.util.concurrent.Executors;
17 18 public class CacheUtils {
18 19  
19 20 public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
20   - Executor executor = Executors.newCachedThreadPool( // TODO 芋艿:可能要思考下,未来要不要做成可配置
21   - TtlExecutors.getDefaultDisableInheritableThreadFactory()); // TTL 保证 ThreadLocal 可以透传
  21 + // 1. 使用 TTL 包装 ExecutorService,实现 ThreadLocal 的透传
  22 + // https://github.com/YunaiV/ruoyi-vue-pro/issues/432
  23 + ExecutorService executorService = Executors.newCachedThreadPool(); // TODO 芋艿:可能要思考下,未来要不要做成可配置
  24 + Executor executor = TtlExecutors.getTtlExecutorService(executorService);
  25 + // 2. 创建 Guava LoadingCache
22 26 return CacheBuilder.newBuilder()
23 27 // 只阻塞当前数据加载线程,其他线程返回旧值
24 28 .refreshAfterWrite(duration)
... ...