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

第一种比较简单,利用多线程处理业务逻辑,或者利用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";
}
};

}




SpringBoot+springmvc异步处理请求的更多相关文章

  1. SpringBoot中异步请求和异步调用(看这一篇就够了)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...

  2. 天天写同步,5种SpringMvc异步请求了解下!

    引言 说到异步大家肯定首先会先想到同步.我们先来看看什么是同步? 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 简单来说,同步就是必须一件一件事做,等前一件 ...

  3. Java多线程开发系列之五:Springboot 中异步请求方法的使用

    Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用.这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可 ...

  4. Java利用httpasyncclient进行异步HTTP请求

    Java利用httpasyncclient进行异步HTTP请求 前段时间有个需求在springmvc mapping的url跳转前完成一个统计的业务.显然需要进行异步的处理,不然出错或者异常会影响到后 ...

  5. SpringBoot多跨域请求的支持(JSONP)

    在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBod ...

  6. SpringMVC异步调用,Callable和DeferredResult的使用

    Callable和DeferredResult都是springMVC里面的异步调用,Callable主要用来处理一些简单的逻辑,DeferredResult主要用于处理一些复杂逻辑 1.Callabl ...

  7. SpringMVC响应Ajax请求(@Responsebody注解返回页面)

    项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...

  8. SpringMVC处理客户端请求的过程

    SpringMVC处理客户端请求的过程 以程序部署在Tomcat上为例,网站程序使用SpringMVC框架开发. 1.客户端发起一个访问网站的请求(如: localhost:8080/index). ...

  9. iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

    对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...

随机推荐

  1. PowerShell中和服务相关的命令

    New-Service https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-s ...

  2. thinkphp5项目--企业单车网站(五)

    thinkphp5项目--企业单车网站(五) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  3. Concurrent.Thread.js

    (function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'functi ...

  4. CentOS 源设置

    安装完CentOS后,系统默认的源可能有限满,这时我们需要添加国内比较好的源. 一.国内比较好的源https://opsx.alibaba.com/mirror                  #阿 ...

  5. React-router 4 总结

    React-Router 4: BrowserRouter包裹整个应用 Router路由对应渲染的组件,可嵌套 Link跳转专用 首先 然后 其他组件: url参数 Route组建参数可用冒号标识参数 ...

  6. javascript 基础篇 随课笔记

    !DOCTYPE HTML><html><head><meta name="content-type" content="text/h ...

  7. 【Python】【Head First Python】【chapter1】1 - 导入模块

    导入模块 导入模块有三种方法,以导入sys模块为例: 第一是import module 形式导入 import sys location = sys.stdout 第二是from module imp ...

  8. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  9. js---10作用域链

    <html> <head> <title>scope basic</title> </head> <body> <scri ...

  10. NPOI批量导入大量数据

    简介:NPOI批量导入大量数据 使用SqlBulkCopy 可以将datatable里面的大量数据批量复制到数据库中,而不用担心性能问题,比系统中的传统做法(每20行数据执行一遍mydb.execut ...