我有一个网络应用程序。我的应用程序由Tomcat
部署。我写了一个Servlet Filter
,用于在MDC
上的SLF4J
课程中输入一些数据,代码如下:
MDC.put("Id", UUID.randomUUID().toString();
当我运行第二次或第三次请求的应用程序时,我得到重复的UUID。这种情况是串行的,并不是并发的。我认为存在一个线程池,线程上下文不清楚。
答案 0 :(得分:2)
使用此结构可以保证删除ID:
try {
MDC.put("Id", UUID.randomUUID().toString());
// The rest of your code
} finally {
MDC.remove("Id");
}
(不需要捕获块)。这将保证为此事务删除Id
密钥。
此外,当然Tomcat使用线程池,这是它们在并发时管理请求的方式。进一步阅读:https://tomcat.apache.org/tomcat-6.0-doc/config/executor.html