作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Spring MVC,我有以下设置:
public class MdcTaskDecorator implements TaskDecorator {
@Override
public Runnable decorate(Runnable runnable) {
// Web thread context
// Get the logging MDC context
Map<String, String> contextMap = MDC.getCopyOfContextMap();
return () -> {
try {
// @Async thread context
// Restore the web thread MDC context
if(contextMap != null) {
MDC.setContextMap(contextMap);
}
else {
MDC.clear();
}
// Run the new thread
runnable.run();
}
finally {
MDC.clear();
}
};
}
@Async
public CompletableFuture<String> doSomething_Async() {
MDC.put("doSomething", "started");
return doit();
}
public class ServletLoggingFilter extends AbstractRequestLoggingFilter {
@Override
protected void beforeRequest(HttpServletRequest request, String message) {
MDC.put("webthread", Thread.currentThread().getName()); // Will be webthread-1
}
@Override
protected void afterRequest(HttpServletRequest request, String message) {
MDC.put("responsethread", Thread.currentThread().getName()); // Will be webthread-2
String s = MDC.get("doSomething"); // Will be null
// logthis();
}
最佳答案
我希望你已经解决了这个问题,但如果你没有解决,这里有一个解决方案。
您所要做的一切都可以概括为以下两个简单的步骤:
MdcTaskDecorator
. AsyncConfigurerSupport
用于您的主类并覆盖 getAsyncExecutor()
用您定制的装饰器设置装饰器。 public class AsyncTaskdecoratorApplication extends AsyncConfigurerSupport {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setTaskDecorator(new MdcTaskDecorator());
executor.initialize();
return executor;
}
public static void main(String[] args) {
SpringApplication.run(AsyncTaskdecoratorApplication.class, args);
}
}
关于spring-mvc - 使用 @Async 和 TaskDecorator 记录 MDC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45890181/
使用 Spring MVC,我有以下设置: 用于记录请求的 AbstractRequestLoggingFilter 派生过滤器。 一个 TaskDecorator,用于将 MDC 上下文映射从 We
我是一名优秀的程序员,十分优秀!