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