• SpringBoot+springmvc异步处理请求


    有两种情况,第一种是业务逻辑复杂,但不需要业务逻辑的结果,第二种是需要返回业务逻辑的处理结果

    第一种比较简单,利用多线程处理业务逻辑,或者利用spring中@Asyn注解更简单,

    使用@Asyn注解,要首先要配置开启异步注解

    1. @Configuration
    2. @EnableAsync
    3. public class AsyncConfig {
    4. }

    然后直接在方法上注解即可

    1. @Service
    2. public class AsyncAction {
    3. @Async
    4. public void fun1() {
    5. try {
    6. Thread.sleep(10000);
    7. } catch (InterruptedException e) {
    8. // TODO Auto-generated catch block
    9. e.printStackTrace();
    10. }
    11. System.out.println("fun1");
    12. }
    13. }


    切记异步类的bean不能被重复扫描,而且只能被sping容器的上下文扫描,不能被spingmvc扫描,否则异步失效

    第二种需要返回业务逻辑情况则首先需要开启异步支持

    1. public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    2. @Override
    3. protected void customizeRegistration(Dynamic registration) {
    4. registration.setAsyncSupported(true);
    5. }
    或者在web.xml中开启

    1. <servlet>
    2. <servlet-name>SpringMvc</servlet-name>
    3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    4. <init-param>
    5. <param-name>contextConfigLocation</param-name>
    6. <param-value>...</param-value>
    7. </init-param>
    8. <load-on-startup>1</load-on-startup>
    9. <async-supported>true</async-supported>
    10. </servlet>

    然后配置一下线程池

    1. @Configuration
    2. @EnableWebMvc
    3. @ComponentScan("spittr.web")
    4. public class WebConfig extends WebMvcConfigurerAdapter {
    5. @Override
    6. public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
    7. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    8. executor.setCorePoolSize(5);
    9. executor.setMaxPoolSize(10);
    10. executor.setQueueCapacity(50);
    11. executor.setThreadNamePrefix("abc-");
    12. executor.setKeepAliveSeconds(30);
    13. configurer.setTaskExecutor(executor);
    14. configurer.setDefaultTimeout(600);
    15. }
    1. @Configuration
    2. @EnableWebMvc
    3. @ComponentScan("spittr.web")
    4. public class WebConfig extends WebMvcConfigurerAdapter {


    这样就可以开始异步处理任务了,能够尽快释放servlet线程,缓解高并发问题

    1. @RequestMapping(value = "/async")
    2. public @ResponseBody Callable<String> async() {
    	return new Callable<String>() {
                @Override
                public String call() throws Exception {
                    Thread.sleep(2000);
                    return "Callable result";
                }
            };
    }
    
    

    
    


    
                
  • 相关阅读:
    jquery实现章节目录效果
    Delphi里如何让程序锁定在桌面上,win+d都无法最小化
    php 之跨域上传图片
    delphi判断文件类型
    EmptyRecycle() 清空回收站
    delphi检查url是否有效的方法
    Explode TArray
    css设置中文字体(font-family:"黑体")后样式失效问题
    javascript-lessons
    课后作业2
  • 原文地址:https://www.cnblogs.com/jpfss/p/9329410.html
Copyright © 2020-2023  润新知