Solon v3.0.3

问题:能换掉框架的 ThreadLocal 吗?

</> markdown

这个倒是能的,一般不建议。在启动之前,更换 ThreadLocal 工厂:

public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //v2.7.3 之前,用 FactoryManager.threadLocalFactory(...)
            app.factoryManager().threadLocalFactory((applyFor, inheritance0) -> {
                return new TransmittableThreadLocal();
            });
        });
    }
}

框架里有用到 ThreadLocal 的地方(默认是使用 inheritance0=false),分别是:

  • namei: Nami 调用附件 NamiAttachment
  • solon: 获取当前请求上下文 Context.current()
  • solon-cloud: 跟踪服务默认实现 CloudTraceServiceImpl 里的跟踪ID
  • solon-data: 事务执行器 TranExecutor 用到的事务状态传递
  • solon-data-dynamicds: 动态数据源的 DynamicDsKey.getCurrent()
  • solon-logging-simplie: MDC适配器 SolonMDCAdapter