gpt4 book ai didi

java - 设计失败,MDC 滥用

转载 作者:行者123 更新时间:2023-11-30 06:58:40 27 4
gpt4 key购买 nike

我必须接管一个包含多个层、服务和组件的巨型整体。

当我浏览代码时,我首先意识到的是 MDC 的使用.

一些例子:

public void setContextOrderId(String orderId) {
MDC.put("orderId", orderId);
}

String sessionId = MDC.get("sessionId");

MDC 在应用程序中用作静态 HashMap,我相信其动机是因为 MDC 在请求管道中的每个请求都可用,并且它被用作存储。

如何更换?线程安全容器有替代方案吗?

谢谢。

最佳答案

天哪。有人使用MDC来进行数据存储。 “滥用”是这里的正确术语。

正确的解决方案取决于具体使用的内容。例如,如果您运行 Spring 之类的东西,那可能就是请求范围 bean 之类的东西。

从技术上讲,大多数“请求范围”解决方案使用 ThreadLocal在引擎盖下。 MDC 还使用 ThreadLocal

如果我要重构类似的东西,我会尝试朝着某些依赖注入(inject)容器的方向发展,该容器尊重不同的范围(请求、 session 、应用程序等),无论是 Spring 还是其他。如果您只是将 MDC 替换为您自己的基于 ThreadLocal 的存储,您不会获得太多好处。

关于java - 设计失败,MDC 滥用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41346930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com