Spring boot 配置异步处理执行器

示例如下:

1、 新建Maven 项目 async-executor

2、pom.xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 6 7 <modelVersion>4.0.0</modelVersion> 8 <groupId>com.java</groupId> 9 <artifactId>async-executor</artifactId> 10 <version>1.0.0</version> 11 12 <parent> 13 <groupId>org.springframework.boot</groupId> 14 <artifactId>spring-boot-starter-parent</artifactId> 15 <version>2.0.5.RELEASE</version> 16 </parent> 17 18 19 <dependencies> 20 21 <!-- Spring Boot --> 22 <dependency> 23 <groupId>org.springframework.boot</groupId> 24 <artifactId>spring-boot-starter-web</artifactId> 25 </dependency> 26 27 28 <!-- 热部署 --> 29 <dependency> 30 <groupId>org.springframework</groupId> 31 <artifactId>springloaded</artifactId> 32 <version>1.2.8.RELEASE</version> 33 <scope>provided</scope> 34 </dependency> 35 <dependency> 36 <groupId>org.springframework.boot</groupId> 37 <artifactId>spring-boot-devtools</artifactId> 38 <scope>provided</scope> 39 </dependency> 40 41 </dependencies> 42 43 <build> 44 <finalName>${project.artifactId}</finalName> 45 <plugins> 46 <plugin> 47 <groupId>org.apache.maven.plugins</groupId> 48 <artifactId>maven-compiler-plugin</artifactId> 49 <configuration> 50 <source>1.8</source> 51 <target>1.8</target> 52 <encoding>UTF-8</encoding> 53 </configuration> 54 </plugin> 55 56 <plugin> 57 <groupId>org.springframework.boot</groupId> 58 <artifactId>spring-boot-maven-plugin</artifactId> 59 <executions> 60 <execution> 61 <goals> 62 <goal>repackage</goal> 63 </goals> 64 </execution> 65 </executions> 66 </plugin> 67 </plugins> 68 </build> 69</project>

3、AsyncExecutorStarter.java

1package com.java; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6/** 7 * 主启动类 8 * 9 * @author Logan 10 * @version 1.0.0 11 * @createDate 2019-05-06 12 * 13 */ 14@SpringBootApplication 15public class AsyncExecutorStarter { 16 17 public static void main(String[] args) { 18 SpringApplication.run(AsyncExecutorStarter.class, args); 19 } 20 21}

4、AsyncExecutorConfig.java

1package com.java.config; 2 3import java.util.concurrent.Executor; 4 5import org.springframework.context.annotation.Configuration; 6import org.springframework.scheduling.annotation.AsyncConfigurer; 7import org.springframework.scheduling.annotation.EnableAsync; 8import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 9 10/** 11 * 异步任务执行器配置 12 * 13 * @author Logan 14 * @version 1.0.0 15 * @createDate 2019-05-06 16 * 17 */ 18@EnableAsync 19@Configuration 20public class AsyncExecutorConfig implements AsyncConfigurer { 21 22 @Override 23 public Executor getAsyncExecutor() { 24 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 25 executor.setCorePoolSize(5); 26 executor.setMaxPoolSize(10); 27 executor.setQueueCapacity(30); 28 executor.initialize(); 29 return executor; 30 } 31 32}

5、AsyncHandler.java

1package com.java.handler; 2 3import org.springframework.scheduling.annotation.Async; 4import org.springframework.stereotype.Component; 5 6/** 7 * 异步处理器 8 * 9 * @author Logan 10 * @version 1.0.0 11 * @createDate 2019-05-06 12 * 13 */ 14@Component 15public class AsyncHandler { 16 17 @Async 18 public void handle(int i) { 19 System.out.println(i + "[ 异步处理任务开始执行 ]" + System.currentTimeMillis()); 20 21 try { 22 Thread.sleep(5000); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 27 System.out.println(i + "[ 异步处理任务完成执行 ]" + System.currentTimeMillis()); 28 29 } 30 31}

6、AsyncController.java

1package com.java.controller; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.web.bind.annotation.GetMapping; 5import org.springframework.web.bind.annotation.RestController; 6 7import com.java.handler.AsyncHandler; 8 9/** 10 * 控制层收到请求,任务交给异步处理器后台处理,接口直接返回响应 11 * 12 * @author Logan 13 * @version 1.0.0 14 * @createDate 2019-05-06 15 * 16 */ 17@RestController 18public class AsyncController { 19 20 @Autowired 21 private AsyncHandler handler; 22 23 @GetMapping("/async") 24 public String async() { 25 System.out.println("[ 收到请求 ]"); 26 27 handler.handle(1); 28 handler.handle(2); 29 30 System.out.println("[ 返回响应 ]"); 31 return "您的任务已提交"; 32 } 33 34}

7、 运行 AsyncExecutorStarter.java 启动服务

浏览器输入 http://localhost:8080/async

快速收到服务端响应结果<您的任务已提交>

观察服务端控制台,异步处理程序仍在执行,最终打印内容如下:

1[ 收到请求 ] 2[ 返回响应 ] 31[ 异步处理任务开始执行 ]1557148926609 42[ 异步处理任务开始执行 ]1557148926610 51[ 异步处理任务完成执行 ]1557148931609 62[ 异步处理任务完成执行 ]1557148931610

结论:

服务端收到请求后立即返回,然后两个异步任务几乎同时提交,各自开始后台执行,互不影响。

Spring boot 配置异步处理执行器

.

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springboot2.1整合mybatis

1:添加依赖<?xmlversion"1.0"encoding"UTF8"?<projectxmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchemainstance"xsi

基于Maven工程下的MyBatis框架+MySQL+连接池的数据查询操作

具体操作项目结构引入项目依赖pom.xml<?xmlversion"1.0"encoding"UTF8"?<projectxmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchemainstance"xsi

SpringBoot2.0配置durid数据源

pom依赖<?xmlversion"1.0"encoding"UTF8"?<projectxmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchemainstance"

121 项目 034 笔记向 easyui

pom<?xmlversion"1.0"encoding"UTF8"?<projectxmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchemainstance"

121 项目 034 笔记向 easyui

pom<?xmlversion"1.0"encoding"UTF8"?<projectxmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchemainstance"