Spring异步事件机制_spring 异步事件-程序员宅基地

技术标签: spring  

1、好处:解耦
2、Spring的事件机制默认是同步方式
3、@Async可以使用到类级别,也可以到方法级别

开启异步支持 @EnableAsync

@Configuration
@EnableAsync
public class AppCommonConfig implements AsyncConfigurer{
    @Override
    public Executor getAsyncExecutor() {
    	//TODO: 这里可以实现自己的线程池
        return null;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

事件消费者


@Component
@Async
public class EventConsumer implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        logger.info("接收到事件:" + event.getClass().getSimpleName());
        if (event instanceof OrderEvent) {
            OrderEvent orderEvent = (OrderEvent) event;
            //TODO 后续逻辑
        } 
    }
}

事件生产者

public class XxxService implements ApplicationEventPublisherAware {

    //事件发布者
    protected ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }
          
    public void method11(){
         OrderEvent orderEvent = new OrderEvent(this, "data");
         applicationEventPublisher.publishEvent(orderEvent);
     }
}

事件对象

public class OrderEvent extends ApplicationEvent {
    private Object data;
    public OrderEvent(Object source, Object data) {
        super(source);
        this.data = data;
    }
    public Object getData() {
        return data;
    }
}

方式二:开启异步支持不实现AsyncConfigurer

@Configuration
@EnableAsync
public class AppCommonConfig {
    @Bean(name = "asyncExecutor")
    public Executor asyncExecutor()
    {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(3);
        executor.setMaxPoolSize(3);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("AsynchThread-");
        executor.initialize();
        return executor;
    }
}

事件消费者


@Component
@Async("asyncExecutor") //线程池的bean名称
public class EventConsumer implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        logger.info("接收到事件:" + event.getClass().getSimpleName());
        if (event instanceof OrderEvent) {
            OrderEvent orderEvent = (OrderEvent) event;
            //TODO 后续逻辑
        } 
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lsziri/article/details/87170321

智能推荐

IDEA安装使用JFormDesigner(非商业用途)_idea jformdesigner-程序员宅基地

文章浏览阅读5.6k次,点赞5次,收藏17次。关于在IDEA中JFormDesigner的安装步骤,和可能出错的一些情况_idea jformdesigner

奥本大学计算机科学硕士,2020年奥本大学硕士专业设置-程序员宅基地

文章浏览阅读161次。奥本大学有综合性的研究生院,该院授予20多个领域的硕士学位和40多个领域的博士学位,其中许多在奥本是仅有的。在农业、林业、生物和物理学、数学、工程、教育及人文科学、药学和兽医学方面都比较强。比较好的研究出现文学、社会学和商业等方面。作为研究教育和科研的综合性中心,为适应现代社会的变化,奥本开发一些研究项目。奥本大学硕士专业设置:奥本大学硕士专业设置广泛,主要有:会计、航天工程、农业产业化、农业通信..._奥本大学ece 硕士

STM32H743+RT-Thread驱动SPI转网口DM9051模块进行联网-程序员宅基地

文章浏览阅读1.7k次。1. 使用RT-Thread Studio软件进行开发使能SPI组件,使能lwip组件2.修改drv_dm9051_init.c 初始化部分,增加SPI总线挂载设备的代码。static int dm9051_auto_init(void){ rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4); dm9051_probe(DM9051_SPI_DEVICE, DM9051_DEVICE_NAME, DM9051__spi转网口

JAVA程序员常用英语-程序员宅基地

文章浏览阅读102次。JAVA程序员常用英语干程序员这行实在是离不开英语,干程序员是一项很辛苦的工作,要成为一个高水平的程序员尤为艰难。这是因为计算机软件技术更新的速度越来越快,而这些技术大多来源于英语国家,我们在引进这些技术时往往受到语言障碍的制约,严重影响到对新技术的理解和消化。首先编程本身就依赖于英语,虽然现在技术的发展,可以使得某些开发工具在变量名和字段名中支持中文,但还未发现能够完全使用中文的编程语..._java 技术英语

利用SPSS Modeler进行数据挖掘——探究不同程序语言的就业情况_spss modeler贝叶斯网络结果解读-程序员宅基地

文章浏览阅读7.1k次,点赞12次,收藏122次。本次SPSS Modeler项目实战,是我个人课余做的一个简单案例,因为本人也是互联网大家庭中的一员,因此最关心的必定是程序语言的未来走势和就业情况,于是就用SPSS Modeler做了一次简单的数据挖掘。简单介绍这次数据挖掘的主要内容就是:使用软件爬取目前北京市不同语言的岗位招聘情况数据,通过SPSS modeler软件的使用对于原始数据预处理,构成高质量数据样本,并实现建模数据分析变量的变化趋势,挖掘深层次原因。对此,细分为以下四个部分1.数据获取与实验内容的初步设计:(1)需要有数据来源的链接_spss modeler贝叶斯网络结果解读

《黑科技》_outchain_player-程序员宅基地

文章浏览阅读1.7k次。【 随着医学领域的发展,人类活到一二百岁,甚至更长,并非遥不可及。】 未来的世界什么样?最前沿的科技会给人类生活带来哪些改变?它们的原理又是什么? 依靠克隆、干细胞等技术,人类可以修复受损的身体,开展器官移植;通过对长寿基因的研究,人们可以延年益寿;外骨骼能让人成为钢铁侠,而探测雷达能让你拥有 “火眼金睛”;机器的深度学习与 “天罗地网” 的结合,让人与世界以更奇妙的_outchain_player

随便推点

mugen linux主程序,Mugen主程序报错汇总-程序员宅基地

文章浏览阅读4.8k次。原文来自11区民间整合的Mugen主程序报错汇总,同时加入了千寻网站平时收集的常见报错,源地址:http://mugenbinran.web.fc2.com/error.html以下皆为机翻,有空会慢慢修正翻译加载初始场景报错报错关键字:dojo.def 或 stage0.def原因:程序以debug模式运行且调用了debug场景解决方法:1、在mugen.cfg文件内找到[Debug]下的Sta..._mugen报错

因子个数以及因子和_因子个数和-程序员宅基地

文章浏览阅读1.2k次。整数因子个数题目描述高度可约的三角形数三角形数数列是通过逐个加上自然数来生成的。例如,第7个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。三角形数数列的前十项分别是:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …让我们列举出前七个三角形数的所有约数:1: 13: 1,36: 1,2,3,610: 1,2,5,1015: ..._因子个数和

Anaconda主页(Home)中没有VS code的解决办法_anaconda navigator中没有vscode-程序员宅基地

文章浏览阅读2.3w次,点赞13次,收藏31次。Anaconda主页中没有VScode的解决办法原因很简单,新版Anaconda将VScode 和 PyCharm 当做外部软件,所以不再提供内部conda安装。解决办法:第一步:在官网下载VS code(https://code.visualstudio.com/download)第二步:进入链接 https://marketplace.visualstudio.com/items?it..._anaconda navigator中没有vscode

高版本Andriod Studio集成HMS环境看这篇就够了(附加步骤多图、资源下载、源代码、问题总结)_android studio 版本几可以装hms-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏15次。Aandriod Studio配置HMS服务0.前言1.开发环境介绍a) Java版本b) Android Studio版本c) Gradle SDK版本2.注册认证华为开发者联盟(个人开发者)a) 进入网址,点击右上角管理中心b) 注册/登录账号c) 实名认证开发者d)3.新建Android Studio项目0.前言1.开发环境介绍a) Java版本博主基于华为开发者学堂1+X初级开发课程由于博主版本与教程中所用不一致因此遇到许多配置语法上的不一致问题其他与博主开发环境有区别的朋友们,仅_android studio 版本几可以装hms

WebRTC QoS方法(汇总篇)-程序员宅基地

文章浏览阅读1.8w次,点赞44次,收藏108次。目前总结出webrtc用于提升QOS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)。这几种方法在webrtc架构分布如下:具体实现原理如下:一、NACK与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收......_webrtc qos

OS之宏内核(Monolithic kernel)和微内核(Microkernel)详解_微内核和宏内核-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏4次。内核介绍Microkernel:在Microkernel中,大多数内核以特权状态作为独立的进程运行,它们通过消息传递进行通信。在这些设计中,Microkernel部分通常只是一个消息转发站:当系统调用模块想要向文件系统模块发送消息时,该消息直接通过内核[1]转发。这种方法有助于实现模块之间的隔离。在一些微内核设计中,更多的功能(如I/O)也封装在内核中。但最基本的想法是保持Microkernel尽可能小,这样整个内核只能通过移植Microkernel本身移植到一个新的平台上。所有其他模块只依赖于Micr_微内核和宏内核

推荐文章

热门文章

相关标签