当前位置: 首页 > wzjs >正文

网站功能开发水果网站建设的策划书

网站功能开发,水果网站建设的策划书,域名主机网站导航,公司没有自己的网站📝 Part 1:ThreadLocal、MDC、TTL 原理与实践 在 Java 应用开发中,线程上下文信息传递是一个非常常见但又容易被忽视的问题。尤其是在多线程或异步编程场景下,如何保证当前请求的上下文(如用户身份、traceId、租户信息…

📝 Part 1:ThreadLocal、MDC、TTL 原理与实践

在 Java 应用开发中,线程上下文信息传递是一个非常常见但又容易被忽视的问题。尤其是在多线程或异步编程场景下,如何保证当前请求的上下文(如用户身份、traceId、租户信息等)能够在整个调用链中正确传递,是构建稳定系统的关键。

本文将带你深入理解三种最常见的上下文管理方案:ThreadLocalMDCTTL,并结合 Spring 框架和实际业务场景进行详细讲解。


一、ThreadLocal —— 最基础的线程本地变量

1. 原理简介

ThreadLocal 是 Java 提供的一个线程级别的本地变量存储机制。每个线程都有自己的独立副本,互不干扰。

public class UserContext {private static final ThreadLocal<String> currentUser = new ThreadLocal<>();public static void setCurrentUser(String user) {currentUser.set(user);}public static String getCurrentUser() {return currentUser.get();}public static void clear() {currentUser.remove();}
}

2. 使用场景

  • 请求拦截器中设置用户信息。
  • 日志记录时携带用户信息。
  • 在 Service 层或 DAO 层复用当前用户信息。

3. 注意事项

  • 无法跨线程使用:在线程池中执行任务时,子线程无法继承主线程的值。
  • 需要手动清理资源,避免内存泄漏。

4. Spring 整合建议

  • 可以封装为一个工具类,在 Controller 层通过拦截器设置,在 Service 层使用。
  • 推荐配合 @Component@Service 注入上下文逻辑。

二、MDC(Mapped Diagnostic Context)—— 日志追踪利器

1. 原理简介

MDC 是日志框架(如 Logback、Log4j)提供的一个线程上下文机制,用于在日志中打印诊断信息(如 traceId、userId 等)。

import org.slf4j.MDC;MDC.put("userId", "123");
log.info("This log contains userId: {}", MDC.get("userId"));

2. 使用场景

  • 链路追踪中的 traceId、spanId 传递。
  • 用户标识、租户标识等信息写入日志。
  • 结合 AOP 或 Filter 实现统一日志上下文注入。

3. 注意事项

  • 同样基于线程局部变量,无法自动跨线程传递
  • 日志内容依赖日志框架配置,不具备业务逻辑上下文能力。

4. Spring 整合建议

  • 在全局拦截器或过滤器中设置关键字段(如 traceId)。
  • 使用 @Aspect 切面统一打印上下文信息。
  • 推荐配合 Sleuth + Zipkin 实现完整的分布式追踪。
示例:日志模板配置(logback-spring.xml)
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg [userId=%X{userId}, traceId=%X{traceId}]%n</pattern></encoder></appender><root level="info"><appender-ref ref="STDOUT"/></root>
</configuration>

三、TTL(TransmittableThreadLocal)—— 支持线程池的上下文传递

1. 原理简介

TTL(TransmittableThreadLocal)是 Alibaba 开源的一个增强版 ThreadLocal,解决了线程池中上下文丢失的问题。它通过装饰 RunnableCallable 来实现上下文的复制与恢复。

GitHub 地址:https://github.com/alibaba/transmittable-thread-local

<!-- Maven 引入 -->
<dependency><groupId>com.alibaba</groupId><artifactId>transmittable-thread-local</artifactId><version>2.12.1</version>
</dependency>
TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();
context.set("value");ExecutorService executor = TtlExecutors.getTtlExecutorService(Executors.newFixedThreadPool(2));executor.submit(() -> {System.out.println(context.get()); // 输出 value
});

2. 使用场景

  • 使用线程池处理异步任务时需要上下文。
  • 微服务内部多线程并发调用。
  • 避免因线程复用导致上下文混乱。

3. 优点

  • 完全兼容原生 ThreadLocal
  • 支持线程池、CompletableFuture、ScheduledExecutorService 等。
  • 可以与 MDC 联合使用,解决日志上下文丢失问题。

4. Spring 整合建议

  • 替换所有 ThreadLocalTransmittableThreadLocal
  • 包装线程池:使用 TtlExecutors.getTtlExecutorService()
  • 配合自定义注解 + AOP 实现上下文自动注入。

四、综合对比表

方案是否支持线程池是否适合业务上下文是否适合日志上下文第三方依赖Spring 兼容性
ThreadLocal✅(需集成)
MDC❌(依赖日志框架)
TTL✅(可结合)✅(阿里开源)

五、推荐组合方案(适用于微服务)

组件推荐方案
上下文传递TTL(TransmittableThreadLocal)
日志上下文MDC + TTL(通过 TtlMDCAdapter)
异步任务使用 TtlExecutors 包装线程池
分布式追踪配合 Sleuth + Zipkin

六、结语

在 Spring 应用中,合理选择上下文传递机制对于构建稳定、可维护的系统至关重要。不同场景应采用不同的策略:

  • 单线程同步操作:使用 ThreadLocalMDC
  • 多线程异步操作:优先考虑 TTL
  • 分布式链路追踪:结合 Sleuth + Zipkin

如果你正在构建的是一个典型的微服务架构项目,强烈建议使用 TTL + MDC + Sleuth 的组合,以实现优雅的上下文管理和日志追踪体系。


📌 参考链接

  • TransmittableThreadLocal GitHub
  • Spring Boot Logging with MDC

文章转载自:

http://9QlU1A5n.Lgwpm.cn
http://SzIaukGu.Lgwpm.cn
http://ekt1ANeq.Lgwpm.cn
http://BoaR3cEY.Lgwpm.cn
http://PXmjBpoF.Lgwpm.cn
http://yuCFdZJC.Lgwpm.cn
http://VkU4mVmV.Lgwpm.cn
http://XxT10zGz.Lgwpm.cn
http://YnJ0Ljgc.Lgwpm.cn
http://WDwdCMGf.Lgwpm.cn
http://f8DNaIcy.Lgwpm.cn
http://YHT3sV5M.Lgwpm.cn
http://Skmeo7fO.Lgwpm.cn
http://HKnJmdwK.Lgwpm.cn
http://pi0KV21b.Lgwpm.cn
http://32iszBjz.Lgwpm.cn
http://CZg3FkIP.Lgwpm.cn
http://HF22NN7o.Lgwpm.cn
http://mcqtO0eS.Lgwpm.cn
http://aKpL0kmz.Lgwpm.cn
http://Bp4sWSDQ.Lgwpm.cn
http://XmcPY9BB.Lgwpm.cn
http://eKlxH5XI.Lgwpm.cn
http://r6qkwjzC.Lgwpm.cn
http://foZnsX0b.Lgwpm.cn
http://0IoAter5.Lgwpm.cn
http://FYvxSXaU.Lgwpm.cn
http://Uto3DTbA.Lgwpm.cn
http://Mv3B9vzd.Lgwpm.cn
http://5P3UPNVv.Lgwpm.cn
http://www.dtcms.com/wzjs/757176.html

相关文章:

  • 可信网站标识宁波创建网站
  • 网站安全证书有问题如何解决怎么样注册自己的网站
  • 孝感网站建设 付款方式 银行中职示范校建设验收网站
  • 电话网站域名到期制作网站培训
  • 南宁网站建设王道下拉強wordpress注册公众号
  • 长沙口碑最好网站建设公司排行榜网站导航作用
  • 网站推广策划公司网站建设与管理就业方向
  • 烫画图案设计网站企业网站上线
  • 深圳手机模板建站怎么做会员自动售卡网站
  • 做网站需要懂什么接广告赚钱的平台
  • 药品和医疗器械网站icp备案前置审批流程wordpress wp rss
  • 做淘客网站要什么样服务器成都建设诚信网站
  • 自学网站开发需要多久建一个c2c网站要多少钱
  • 浙江百度推广高手优化网站
  • h5网站建设h网站栏目设计怎么写
  • 仿网站上的焦点图湖北建设厅网站怎么打不开
  • 怎么开个网站wordpress删除无分类文章
  • 门户网站首页设计网站开发管理系统有哪些
  • 西安网站建设开发制作wap站是什么意思啊
  • 电子商城网站的设计与实现太原市住房和城乡建设部网站
  • 企业网站服务器租用广州企业网站建设方案
  • 淘宝找做网站福州seo排名优化
  • 洛阳高新区做网站公司网站卡片设计
  • 网站建设从哪入手wordpress自定义链接不能用
  • 建立网站的主要流程有哪些步骤怎样开个人网站
  • 建网站知乎建设网站赚广告费是否可行
  • 华为官方网站手机商城住房与城乡建设部网站注册中心
  • o2o网站开发公司专业的企业网站定制公司
  • 遵义门户网站专业建站推广网络公司
  • 内蒙古网络自学网站建设重庆九龙坡营销型网站建设公司哪家好