spring boot scheduled 配置异步 spring boot异步controller_ide

 

 

1、Runnable 方式

spring boot scheduled 配置异步 spring boot异步controller_ide_02

 

spring boot scheduled 配置异步 spring boot异步controller_主线程_03

2、DeferredResult 方式

spring boot scheduled 配置异步 spring boot异步controller_ide_04

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