天天看點

異步調用為什麼要複制線程上下文資訊?何時需線程上下文拷貝

異步調用為什麼要複制線程上下文資訊?何時需線程上下文拷貝

配置 spring 線程池

異步調用為什麼要複制線程上下文資訊?何時需線程上下文拷貝
  • 調用方和被調用方的方法不能在同一個 bean 類中。

何時需線程上下文拷貝

比如使用者認證和 tracing 調用鍊相關資訊都在請求線程上下文中,但是異步時就會丢失,是以需要一直攜帶。可實作 spring 的如下接口

TaskDecorator

異步調用為什麼要複制線程上下文資訊?何時需線程上下文拷貝

裝飾器的回調接口,該接口将應用于将要執行的任何Runnable 。

請注意,這樣的裝飾器不一定适用于使用者提供的Runnable / Callable ,而是适用于實際的執行回調(可能是使用者提供的任務的包裝)。

主要使用場景是圍繞任務的調用設定一些執行上下文,或者為任務執行提供一些監視/統計資訊。

自定義實作類實作其接口方法即可

裝飾給定的Runnable ,傳回可能包裝的Runnable以便實際執行

異步調用為什麼要複制線程上下文資訊?何時需線程上下文拷貝