多线程tls_threadlocal传递到子线程

多线程tls_threadlocal传递到子线程Spring线程池异步传递MDC信息和TraceId目录1. 什么是MDC2. 引入MDC打印步骤2.1 pom依赖2.2 log4j2打印日志配置文件3 步骤演示3.1 单线程业务使用示例postman查

Spring线程池异步传递MDC信息和TraceId   目录   1. 什么是MDC   2. 引入MDC打印步骤   2.1 pom依赖   2.2 log4j2打印日志配置文件   3 步骤演示   3.1 单线程业务使用示例   postman查询示例   查询代码   查询日志   3.2 自定义MDC异步线程池   自定义异步MDC线程池代码   初始化线程池   通过注解和注入方式使用   入口代码   结果示例   3.3 包装单个线程   包装MDCRunable   包装MDCCallable   声明普通线程池   使用包装线程   4 总结   1. 什么是MDC   MDC,英文全称是 Mapped Diagnostic Context,含义是映射调试上下文。它是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的类。MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。   2. 引入MDC打印步骤   基于springboot项目中集成MDC。   1 引入log4j2的jar包   2 配置log4j3的配置   3 在打印日志前往MDC中塞入值   2.1 pom依赖   2.2 log4j2打印日志配置文件   resource目录下创建log4j.xml配置如下   
多线程tls_threadlocal传递到子线程   application.properties中添加:   log4j.xml中添加:   3 步骤演示   3.1 单线程业务使用示例   设想场景,查询根据书名查询书籍的信息。 postman查询示例   一般在header中设置属性requestId为32位随机数,以保证这次请求唯一,在后端比较好查询这次数据流。   
多线程tls_threadlocal传递到子线程 查询代码   这里简单的从request中header前端传入的requestId。   当然也有更优雅的方式,比方自定义filter,controller执行前的filter中提前初始化MDC信息。   查询日志   查询的日志中有MDC的requestid信息,方便定位问题。   3.2 自定义MDC异步线程池   自定义MDC线程池是常用的一种手段。   
多线程tls_threadlocal传递到子线程  自定义异步MDC线程池代码   初始化线程池   通过注解和注入方式使用   注解方式,主要使用@Async注解   注入方式,有三种注入,这里列举一种注入。   入口代码   结果示例   
多线程tls_threadlocal传递到子线程   PS:这里不探讨分布式调用链。   3.3 包装单个线程   包装单个线程也是一种实现方式,利用构造函数可以携带额外的参数,比较灵活。 包装MDCRunable   包装MDCCallable   声明普通线程池   使用包装线程   4 总结   这里不介绍分布式调用链这里的线程池调用写得有点问题,带有执行的结果应该用线程池submit,没有执行结果的直接用execute即可。   5 跨线程调用传递TraceId   在线程池中用 RunnableWrapper 包裹Runnable,使用CallableWrapper包裹Callable。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/74890.html

(0)
上一篇 2024年 8月 5日 上午8:32
下一篇 2024年 8月 5日 上午8:39

相关推荐

关注微信