SpringBoot+springmvc异步处理请求
有两种情况,第一种是业务逻辑复杂,但不需要业务逻辑的结果,第二种是需要返回业务逻辑的处理结果
第一种比较简单,利用多线程处理业务逻辑,或者利用spring中@Asyn注解更简单,
使用@Asyn注解,要首先要配置开启异步注解
-
@Configuration
-
@EnableAsync
-
public class AsyncConfig {
-
-
}
然后直接在方法上注解即可
-
@Service
-
public class AsyncAction {
-
-
@Async
-
public void fun1() {
-
try {
-
Thread.sleep(10000);
-
} catch (InterruptedException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
System.out.println("fun1");
-
}
-
}
切记异步类的bean不能被重复扫描,而且只能被sping容器的上下文扫描,不能被spingmvc扫描,否则异步失效
第二种需要返回业务逻辑情况则首先需要开启异步支持
-
public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
-
@Override
-
protected void customizeRegistration(Dynamic registration) {
-
registration.setAsyncSupported(true);
-
}
或者在web.xml中开启
-
<servlet>
-
<servlet-name>SpringMvc</servlet-name>
-
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-
<init-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>...</param-value>
-
</init-param>
-
<load-on-startup>1</load-on-startup>
-
<async-supported>true</async-supported>
-
</servlet>
然后配置一下线程池
-
@Configuration
-
@EnableWebMvc
-
@ComponentScan("spittr.web")
-
public class WebConfig extends WebMvcConfigurerAdapter {
-
-
@Override
-
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
-
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-
executor.setCorePoolSize(5);
-
executor.setMaxPoolSize(10);
-
executor.setQueueCapacity(50);
-
executor.setThreadNamePrefix("abc-");
-
executor.setKeepAliveSeconds(30);
-
configurer.setTaskExecutor(executor);
-
configurer.setDefaultTimeout(600);
-
}
-
@Configuration
-
@EnableWebMvc
-
@ComponentScan("spittr.web")
-
public class WebConfig extends WebMvcConfigurerAdapter {
这样就可以开始异步处理任务了,能够尽快释放servlet线程,缓解高并发问题
-
@RequestMapping(value = "/async")
-
-
public @ResponseBody Callable<String> async() {
return new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "Callable result";
}
};
}
SpringBoot+springmvc异步处理请求的更多相关文章
- SpringBoot中异步请求和异步调用(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...
- 天天写同步,5种SpringMvc异步请求了解下!
引言 说到异步大家肯定首先会先想到同步.我们先来看看什么是同步? 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 简单来说,同步就是必须一件一件事做,等前一件 ...
- Java多线程开发系列之五:Springboot 中异步请求方法的使用
Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用.这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可 ...
- Java利用httpasyncclient进行异步HTTP请求
Java利用httpasyncclient进行异步HTTP请求 前段时间有个需求在springmvc mapping的url跳转前完成一个统计的业务.显然需要进行异步的处理,不然出错或者异常会影响到后 ...
- SpringBoot多跨域请求的支持(JSONP)
在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBod ...
- SpringMVC异步调用,Callable和DeferredResult的使用
Callable和DeferredResult都是springMVC里面的异步调用,Callable主要用来处理一些简单的逻辑,DeferredResult主要用于处理一些复杂逻辑 1.Callabl ...
- SpringMVC响应Ajax请求(@Responsebody注解返回页面)
项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...
- SpringMVC处理客户端请求的过程
SpringMVC处理客户端请求的过程 以程序部署在Tomcat上为例,网站程序使用SpringMVC框架开发. 1.客户端发起一个访问网站的请求(如: localhost:8080/index). ...
- iOS 多个异步网络请求全部返回后再执行具体逻辑的方法
对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...
随机推荐
- quartz 持久化 数据库表
此处只包括配置数据库操作 quartz 持久化数据库表格字段解释建表,SQL语句在dbTables文件夹中可以找到,介绍下我们开发主要使用到的表: (版本不一样,可能数据库表也不一样,这里使用2.2. ...
- c# 引用ConfigurationManager 类
c#添加了Configuration;后,竟然找不到 ConfigurationManager 这个类,后来才发现:虽然引用了using System.Configuration;这个包,但是还是不行 ...
- Conventions and patterns for multi-platform development
For Developers > Design Documents > Conventions and patterns for multi-platform developme ...
- openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
一.安装驱动 YaST控制中心->软件管理->搜索->hplip 安装hplip 如下图: HPLIP(Linux Imaging and Printing Object)以前有hp ...
- 处理某客户p570硬盘故障所思
p570,硬盘故障. 机器有两个vg,rootvg和datavg,rootvg未做镜像,datavg已做镜像.系统errpt和HMC报硬盘有问题,查看错误代码可能是硬盘有坏道(坏块),在尽量保全用户数 ...
- flex RemoteObject 的两种使用方法
这里使用的是django1.6 和 postgreSQL9.0 FlashBuilder4.5 django方面就不说了,根据文档来做,建好模块,配置好数据库等等 创建 gateway 和 time ...
- Python命令行參数大全
-b : 当转换数组为字符串时提出警告.比方str(bytes_instance), str(bytearray_instance). -B : 当导入.py[co]文 ...
- Oracle HR 例子用户的建立 10g,11g均可
Oracle HR 例子用户的建立 10g,11g均可 先将附件(见文章尾部)上的 10 个 .sql 文件放入这个路径中 : $ORACLE_HOME/demo/schema/human_resou ...
- DistBelief 框架下的并行随机梯度下降法 - Downpour SGD
本文是读完 Jeffrey Dean, Greg S. Corrado 等人的文章 Large Scale Distributed Deep Networks (2012) 后的一则读书笔记,重点 ...
- 淘宝在hbase中的应用和优化
本文来自于NoSQLFan联合作者@koven2049,他在淘宝从事Hadoop及HBase相关的应用和优化. 对Hadoop.HBase都有深入的了解,本文就是其在工作中对HBase的应用优化小结, ...