问题:能换掉框架的 ThreadLocal 吗?
2026年8月6日 下午10:28:31
这个倒是能的,一般不建议。在启动之前,更换 ThreadLocal 工厂(java25+ 环境,会自动切换到 ScopeLocal):
import org.noear.solon.Solon;
public class App {
public static void main(String[] args) {
Solon.start(App.class, args, app -> {
app.factories().threadLocalFactory((applyFor, inheritance0) -> {
return new TransmittableThreadLocal();
});
});
}
}
框架里有用到 ThreadLocal 的地方(默认是使用 inheritance0=false),分别是:
- namei: Nami 调用附件 NamiAttach(for 4.x)、NamiAttachment(for 3.x)
- solon: 获取当前请求上下文 Context.current()
- solon-cloud: 跟踪服务默认实现 CloudTraceServiceImpl 里的跟踪ID
- solon-data: 事务执行器 TranExecutor 用到的事务状态传递
- solon-data-dynamicds: 动态数据源的 DynamicDsKey.current()
- solon-logging-simplie: MDC适配器 SolonMDCAdapter