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);
    }
}

 

posted on 2018-02-06 10:45  HB1  阅读(3227)  评论(0)    收藏  举报

导航