Java Mono.subscriberContext()返回旧上下文

Java Mono.subscriberContext()返回旧上下文,java,reactive-programming,spring-webflux,project-reactor,Java,Reactive Programming,Spring Webflux,Project Reactor,我有一个PublishContext类,其方法为context(),如下所示: public static Mono<Object> context(){ return Mono.empty().subscriberContext( context -> { Context context1 = context.put("key", "hello"); System.out.println((String) context1.get("

我有一个PublishContext类,其方法为context(),如下所示:

public static Mono<Object> context(){

    return Mono.empty().subscriberContext( context -> {
        Context context1 = context.put("key", "hello");
        System.out.println((String) context1.get("key"));
        return context1;
    });
}
publicstaticmonocontext(){
返回Mono.empty().subscriberContext(上下文->{
Context.put(“key”,“hello”);
System.out.println((String)context1.get(“key”);
返回上下文1;
});
}
在上面的代码中,上下文对象是Context0@744而context1是Context@747这是可以理解的,因为上下文是不可变的,并且总是返回一个新上下文

在我的主类中,我有以下代码:

public static void main(String[] args) {

    Mono<Object> objectMono = PublishContext.context();
    objectMono.subscribe();

    Mono<Object> objectMono1 = Mono.subscriberContext().flatMap(context ->       {
        System.out.println((String) context.get("key"));
        return Mono.empty();
    });
    objectMono1.subscribe();
}
publicstaticvoidmain(字符串[]args){
Mono objectMono=PublishContext.context();
objectMono.subscribe();
Mono objectMono1=Mono.subscriberContext().flatMap(上下文->{
System.out.println((String)context.get(“key”);
返回Mono.empty();
});
objectMono1.subscribe();
}
在这里,我得到了上下文作为Context0@744,即旧上下文,因此,获取“上下文为空”异常。有人能解释一下这种行为吗?另外,我如何访问context0@747我正在从context()方法返回哪个?

  • A)
    上下文
    写入需要是同一个数据链的一部分 操作员
  • B) 它需要位于所需零件的“下游” 读它
因此,拥有源代码(
Mono.empty()
)、
Context
写入(
.subscriberContext(…)
)和订阅的最后一步(
objectMono.subscribe()
)的“自包含”序列没有多大意义

也许可以尝试将
context()
转换为装饰方法

public static <T> Mono<T> addContext(Mono<T> source){
    return source.subscriberContext( context -> {
        Context context1 = context.put("key", "Hello");
        System.out.println((String) context1.get("key"));
        return context1;
    });
}
  • A)
    上下文
    写入需要是同一个数据链的一部分 操作员
  • B) 它需要位于所需零件的“下游” 读它
因此,拥有源代码(
Mono.empty()
)、
Context
写入(
.subscriberContext(…)
)和订阅的最后一步(
objectMono.subscribe()
)的“自包含”序列没有多大意义

也许可以尝试将
context()
转换为装饰方法

public static <T> Mono<T> addContext(Mono<T> source){
    return source.subscriberContext( context -> {
        Context context1 = context.put("key", "Hello");
        System.out.println((String) context1.get("key"));
        return context1;
    });
}
fooUNKNOWN
fooHello