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配置如下
application.properties中添加: log4j.xml中添加: 3 步骤演示 3.1 单线程业务使用示例 设想场景,查询根据书名查询书籍的信息。 postman查询示例 一般在header中设置属性requestId为32位随机数,以保证这次请求唯一,在后端比较好查询这次数据流。
查询代码 这里简单的从request中header前端传入的requestId。 当然也有更优雅的方式,比方自定义filter,controller执行前的filter中提前初始化MDC信息。 查询日志 查询的日志中有MDC的requestid信息,方便定位问题。 3.2 自定义MDC异步线程池 自定义MDC线程池是常用的一种手段。
自定义异步MDC线程池代码 初始化线程池 通过注解和注入方式使用 注解方式,主要使用@Async注解 注入方式,有三种注入,这里列举一种注入。 入口代码 结果示例
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