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

reactor的Hooks.enableAutomaticContextPropagation();不生效解决方案

1. pom中需要先增加如下的内容

<dependency><groupId>io.micrometer</groupId><artifactId>context-propagation</artifactId><version>1.1.2</version>
</dependency>

2. 注意,要看idea是否将context-propagation引入了。我的idea就是不知道为什么,虽然pom中添加了这个maven,mvn clean install 也通过了,但是在idea中的三方库就是没有。我进行了手动引入

3. 编写类继承ThreadLocalAccessor<String>。这个编写类的内容在官方文档中没有,坑人。因此按照官方文档,是不可能得到预期结果的

import io.micrometer.context.ThreadLocalAccessor;
import io.micrometer.context.ContextRegistry;public class CustomThreadLocalAccessor implements ThreadLocalAccessor<String> {public static final ThreadLocal<String> TL = new ThreadLocal<>();@Overridepublic Object key() {return "TLKEY";}@Overridepublic String getValue() {return TL.get();}@Overridepublic void setValue(String value) {TL.set(value);}@Overridepublic void reset() {TL.remove();}
}

4. 使用

   public static void main(String[] args) throws ClassNotFoundException {// 注册 ThreadLocalAccessorContextRegistry.getInstance().registerThreadLocalAccessor(new CustomThreadLocalAccessor());// 启用自动 Context 传播Hooks.enableAutomaticContextPropagation();// 假设 TL 是注册的 ThreadLocalCustomThreadLocalAccessor.TL.set("HELLO");String TLKEY = "TLKEY";String x =Mono.just(1).flatMap(v -> Mono.deferContextual(ctx->Mono.just(Thread.currentThread().getName()+"-"+"delayed ctx[" + TLKEY + "]=" + ctx.getOrDefault(TLKEY, "not found") + ", " +"TL=" + CustomThreadLocalAccessor.TL.get()))).contextWrite(ctx -> ctx.put(TLKEY, "HELLO")).flatMap(v -> Mono.deferContextual(ctx->Mono.just(Thread.currentThread().getName()+"-"+"delayed ctx[" + TLKEY + "]=" + ctx.getOrDefault(TLKEY, "not found") + ", " +"TL=" + CustomThreadLocalAccessor.TL.get()))).contextWrite(ctx -> Context.empty()).subscribeOn(Schedulers.boundedElastic()).block();System.out.println(x);}

http://www.lryc.cn/news/515696.html

相关文章:

  • DS复习提纲模版
  • 蓝桥杯备赛:C++基础,顺序表和vector(STL)
  • 【LLM】概念解析 - Tensorflow/Transformer/PyTorch
  • 对一段已知行情用python中画出K线图~
  • Rocky Linux下安装meld
  • DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计
  • JavaScript HTML DOM 实例
  • 软件架构和软件体系结构的关系
  • C++并发:在线程间共享数据
  • GaussDB逻辑解码技术原理深度解析
  • JAVA构造方法练习
  • Pytorch 三小时极限入门教程
  • Rockect基于Dledger的Broker主从同步原理
  • 面向对象分析与设计Python版 面向对象的核心特征
  • CDP集群安全指南-静态数据加密
  • RSA密码的安全性分析(简化版本)
  • 嵌入式linux系统中CMake的基本用法
  • 若依修改超级管理员admin的密码
  • matlab中高精度计算函数vpa与非厄米矩阵本征值的求解
  • 王佩丰24节Excel学习笔记——第二十四讲:宏表函数
  • Navicat 17 for Mac 数据库管理软件
  • 现代光学基础2
  • Git 入门(一)
  • mysql自定义安装
  • 微软自带日志输出+Serilog
  • 《PHP MySQL 创建数据库》
  • Python虚拟环境管理
  • 一个在ios当中采用ObjectC和opencv来显示图片的实例
  • c++ vector 使用find查找指定元素方法
  • leetcode 732. 我的日程安排表 III