我有一个用@Async
. 此方法不在控制器中。我想在线程执行完成后拦截线程,以便清除某些 ThreadLocals。
我已经调查过了AsyncHandlerInterceptor
,但是当控制器收到请求而不是在@Async
执行之前和之后,这会被击中。
public class SampleAsyncHandlerInterceptor implements AsyncHandlerInterceptor {
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("afterConcurrentHandlingStarted " + request.getRequestURI());
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle " + request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle " + request.getRequestURI());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion " + request.getRequestURI());
}
}
我想要的是一个像CallableProcessingInterceptor这样的拦截器,但是用于@Async
操作。