为什么我的两个请求在我的 MDC SLF4J 中得到重复的 ID?
Why do I get a duplicate Id in my MDC SLF4J for two requests?
我有一个网络应用程序。 Tomcat
部署了我的应用程序。我写了一个 Servlet Filter
用于将一些数据放入 MDC
class at SLF4J
通过以下代码:
MDC.put("Id", UUID.randomUUID().toString();
当我 运行 我申请第二个或第三个请求时,我得到了重复的 UUID。这种情况是串行的,不是并发的。我认为存在线程上下文未清除的线程池。
使用这个结构来保证 ID 被删除:
try {
MDC.put("Id", UUID.randomUUID().toString());
// The rest of your code
} finally {
MDC.remove("Id");
}
(不需要 catch 块)。这将保证删除此交易的 Id
密钥。
此外,当然 Tomcat 使用线程池,这就是它在并发时管理请求的方式。延伸阅读:https://tomcat.apache.org/tomcat-6.0-doc/config/executor.html
我有一个网络应用程序。 Tomcat
部署了我的应用程序。我写了一个 Servlet Filter
用于将一些数据放入 MDC
class at SLF4J
通过以下代码:
MDC.put("Id", UUID.randomUUID().toString();
当我 运行 我申请第二个或第三个请求时,我得到了重复的 UUID。这种情况是串行的,不是并发的。我认为存在线程上下文未清除的线程池。
使用这个结构来保证 ID 被删除:
try {
MDC.put("Id", UUID.randomUUID().toString());
// The rest of your code
} finally {
MDC.remove("Id");
}
(不需要 catch 块)。这将保证删除此交易的 Id
密钥。
此外,当然 Tomcat 使用线程池,这就是它在并发时管理请求的方式。延伸阅读:https://tomcat.apache.org/tomcat-6.0-doc/config/executor.html