博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@EnableAsync和@Async开始异步任务支持
阅读量:6233 次
发布时间:2019-06-22

本文共 2359 字,大约阅读时间需要 7 分钟。

Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.在开发中实现异步任务,我们可以在配置类中添加@EnableAsync开始对异步任务的支持,并在相应的方法中使用@Async注解来声明一个异步任务。

配置类

package com.xingguo.logistics.controller;import java.util.concurrent.Executor;import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.AsyncConfigurer;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;@Configuration@ComponentScan({
"com.xingguo.logistics.service.aspect","com.xingguo.logistics.service.event"})//开始异步支持@EnableAsyncpublic class AopConfig implements AsyncConfigurer{
@Override public Executor getAsyncExecutor() { //线程池 ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(5); taskExecutor.setMaxPoolSize(10); taskExecutor.setQueueCapacity(25); taskExecutor.initialize(); return taskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return null; }}

任务执行service类

package com.xingguo.logistics.service.aspect;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Servicepublic class TestService2 {
//声明异步任务 @Async public void executeAsyncTask(Integer i){ System.out.println("执行异步任务:"+i); } @Async public void executeAsyncTask2(Integer i){ System.out.println("执行异步任务2:"+i); }}<

测试类

package com.xingguo.logistics.controller;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.xingguo.logistics.service.aspect.TestService2;public class TestController {public static void main(String[] args) {    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopConfig.class);    TestService2 testService2 = context.getBean(TestService2.class);    for(int i = 0; i<10; i++){
testService2.executeAsyncTask(i); testService2.executeAsyncTask2(i); } context.close(); }}

测试结果如下:

这里写图片描述
执行结果可以看出,并没有按照顺序来执行。

你可能感兴趣的文章
flutter中的异步
查看>>
IoC容器初始化过程(下)
查看>>
Python GIL
查看>>
DataWorks数据开发模块大改版灰度发布
查看>>
云吞铺子国际版 Mr.Cloud S1E3《Release Instances & Downgrade Configurations》
查看>>
《Groovy极简教程》第8章 Groovy:领域特定语言(DSL)
查看>>
第197天:js---caller、callee、constructor和prototype用法
查看>>
打造人才“云”梯,阿里云联合各高校开展云计算进校园系列活动
查看>>
vm12 安装ubuntu15.10详细图文教程 虚拟机安装ubuntu安装 ubuntu更新软件 ubuntu一直卡在下载语言怎么办?...
查看>>
vi/vim的三种基本工作模式
查看>>
程维:滴滴希望未来出行选择和调用飞机一样方便
查看>>
windows中使用Git创建分支(branch)?
查看>>
Zabbix3.0学习笔记
查看>>
【最佳实践】OSS开源工具ossutil-增量上传
查看>>
Python | Python学习之深浅拷贝
查看>>
初识Avro
查看>>
中国在人工智能领域成为全球最‘吸金’的国家
查看>>
Kubeflow实战系列:阿里云上使用JupyterHub
查看>>
研究人员成功从地面入侵飞行中的飞机
查看>>
关于代码的那些低级错误,都是血泪的教训
查看>>