序 本文主要研究下reactor异步线程的变量传递 threadlocal的问题 在传统的请求/应答同步模式中,使用threadlocal来传递上下文变量是非常方便的,可以省得在每个方法参数添加公用的变量,比如当前登录用户。但是业务方法可能使用了async或者在其他线程池中异步执行,这个时候threadlocal的作用就失效了。 这个时候的解决办法就是采取propagation模式,即在同步线程与异步线程衔接处传播这个变量。 TaskDecorator 比如spring就提供了TaskDecorator,通过实现这个接口,可以自己控制传播那些变量。例如: class MdcTaskDecorator implements TaskDecorator { @Override public Runnable decorate ( Runnable runnable ) { // Right now: Web thread context ! // (Grab the current thread MDC data) Map < String , String > contextMap = MDC . getCopyOfContextMap ( ) ; return ( ) - > { try { // Right now: @Async thread context ! //