示例如下:
1、 新建Maven 项目 async-executor
2、pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.java
async-executor
1.0.0
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework
springloaded
1.2.8.RELEASE
provided
org.springframework.boot
spring-boot-devtools
provided
${project.artifactId}
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
repackage
3、AsyncExecutorStarter.java
packagecom.java;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;/*** 主启动类
*
*@authorLogan
*@version1.0.0
* @createDate 2019-05-06
**/@SpringBootApplicationpublic classAsyncExecutorStarter {public static voidmain(String[] args) {
SpringApplication.run(AsyncExecutorStarter.class, args);
}
}
4、AsyncExecutorConfig.java
packagecom.java.config;importjava.util.concurrent.Executor;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.AsyncConfigurer;importorg.springframework.scheduling.annotation.EnableAsync;importorg.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;/*** 异步任务执行器配置
*
*@authorLogan
*@version1.0.0
* @createDate 2019-05-06
**/@EnableAsync
@Configurationpublic class AsyncExecutorConfig implementsAsyncConfigurer {
@OverridepublicExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor executor= newThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(30);
executor.initialize();returnexecutor;
}
}
5、AsyncHandler.java
packagecom.java.handler;importorg.springframework.scheduling.annotation.Async;importorg.springframework.stereotype.Component;/*** 异步处理器
*
*@authorLogan
*@version1.0.0
* @createDate 2019-05-06
**/@Componentpublic classAsyncHandler {
@Asyncpublic void handle(inti) {
System.out.println(i+ "[ 异步处理任务开始执行 ]" +System.currentTimeMillis());try{
Thread.sleep(5000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(i+ "[ 异步处理任务完成执行 ]" +System.currentTimeMillis());
}
}
6、AsyncController.java
packagecom.java.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importcom.java.handler.AsyncHandler;/*** 控制层收到请求,任务交给异步处理器后台处理,接口直接返回响应
*
*@authorLogan
*@version1.0.0
* @createDate 2019-05-06
**/@RestControllerpublic classAsyncController {
@AutowiredprivateAsyncHandler handler;
@GetMapping("/async")publicString async() {
System.out.println("[ 收到请求 ]");
handler.handle(1);
handler.handle(2);
System.out.println("[ 返回响应 ]");return "您的任务已提交";
}
}
7、 运行 AsyncExecutorStarter.java 启动服务
快速收到服务端响应结果
观察服务端控制台,异步处理程序仍在执行,最终打印内容如下:
[ 收到请求 ]
[ 返回响应 ]1[ 异步处理任务开始执行 ]1557148926609
2[ 异步处理任务开始执行 ]1557148926610
1[ 异步处理任务完成执行 ]1557148931609
2[ 异步处理任务完成执行 ]1557148931610
结论:
服务端收到请求后立即返回,然后两个异步任务几乎同时提交,各自开始后台执行,互不影响。
Spring boot 配置异步处理执行器
.