-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用问题:TransmittableThreadLocal.remove
并不清空值
#261
Comments
先仅从你给的代码逻辑来分析
ThreadLocalContext.putTransactionId(String) // *写入*`TRANSACTION_ID`
ThreadLocalContext.putRequest(String, String, String)(2 usages) // 更上层业务的 *写入* `TRANSACTION_ID`
ThreadLocalContext.getTransactionId() // *读取,没有关系*
ThreadLocalContext.remove() 其中, String transactionId = "";
try {
ObjectMapper objectMapper = DefaultParser.getObjectMapper();
Request requestModel = objectMapper.readValue(request, DefaultRequest.class);
RequestHeader requestHeader = requestModel.getHeader();
transactionId = requestHeader.getTransactionId();
// !! 从HEADER提取了值,写成 TRANSACTION_ID !!
// !! 这里可能 2个线程的请求 写成一样的 TRANSACTION_ID !!
putTransactionId(transactionId);
// ... 省略代码行 ...
} catch (Exception e) {
log.warn(String.format("Transfer data [%s] to RequestModel fail. so put uuid as transaction id", request));
transactionId = UUID.randomUUID().toString();
putTransactionId(transactionId);
} @guoxunbo 见上面的 当然上面注释只是说明,不足确定是 如果要排查确定问题,需要分离整理 一个 可以复现问题的极简Demo工程:
否则涉及大量你的业务代码与流程,不能分析完整,完成排查。 |
我写了个简单的web测试了下。TTL是好的。
|
找到问题了。。。 我一个注解里用了这个map里 别的栏位也会导致这个不被清除。 |
就是那个enterJpaAdvice方法。有点奇怪。我去琢磨一下 |
还有一个问题问下良神。MDC进行传递的时候只能通过线程池进行修饰传递么。。有没其他的方法 |
你说的『通过线程池进行修饰』是指 2.2 修饰线程池 说的
可以看一下文档2.3 使用 |
测出问题来了。。。 代码我上传到百度云了。 |
@oldratlee 良神。 |
👍 PS: 推荐以GitHub repo的方式 分享 代码工程, |
@oldratlee 好的。下次一定。。。哈哈哈。一起分析一下。好奇怪的。 为啥 |
好像是我使用不严瑾。。。 在 但是就很奇怪。我这里都只是get值。 我再去看下InheritableThreadLocal的holder相关代码瞅下。 |
TransmittableThreadLocal.remove
并不清空值
我在Spring的filter中对相应的请求信息放到了TransmittableThreadLocal方便上下线程传递,在intercepter那边也做了remove.可是当下个Http请求进来,TransmittableThreadLocal还存了上次的值。。。
The text was updated successfully, but these errors were encountered: