Spring boot 异步处理Controller

1、Runnable 方式


2、DeferredResult 方式

@RequestMapping("/order")
public DeferredResult<String> order() throws Exception {
logger.info("主线程开始");
String orderNumber = RandomStringUtils.randomNumeric(8);
mockQueue.setPlaceOrder(orderNumber);
DeferredResult<String> result = new DeferredResult<>(); //设置DeferredResult
deferredResultHolder.getMap().put(orderNumber, result);
return result;
}
deferredResultHolder.getMap().get(orderNumber).setResult("place order success"); //另一个地方完成DeferredResult
3、对于这种异步controller方法如何配置 Interceptor 进行拦截?
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { //注册异步controller方法的Interceptor configurer.registerCallableInterceptors(...); configurer.registerDeferredResultInterceptors(...); } @Override public void addInterceptors(InterceptorRegistry registry) { //注册同步controller方法的Interceptor // registry.addInterceptor(timeInterceptor); } }
浙公网安备 33010602011771号