2

我有一个网络应用程序。我的应用程序由Tomcat. 我通过以下代码编写了一个Servlet Filter用于将一些数据放入MDC类中:SLF4J

MDC.put("Id", UUID.randomUUID().toString();

当我为第二个或第三个请求运行我的应用程序时,我得到了重复的 UUID。这种情况是串行的,不是并发的。我认为存在一个线程上下文不明确的线程池。

4

1 回答 1

2

使用这个结构来保证 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

于 2015-07-21T04:34:56.253 回答