接着之前的事件监听机制实现,我们可以进一步优化。从以下两个方面:

     1.使用@EventListener注解

@Configuration
public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TestListener2.class);context.getBean(MyService.class).doBusiness();context.close();}static class MyEvent extends ApplicationEvent {public MyEvent(Object source) {super(source);}}@Componentstatic class MyService{private static final Logger log = LoggerFactory.getLogger(TestListener2.class);@Autowiredprivate ApplicationEventPublisher publisher;public void doBusiness(){log.debug("主线业务");/* log.debug("发送短信");log.debug("发送邮件");*/publisher.publishEvent(new MyEvent("MyService.doBusiness()"));}}@Componentstatic class SmsService{private static final Logger log = LoggerFactory.getLogger(SmsService.class);@EventListenerpublic void listener(MyEvent event) {log.debug("发送短信");}}@Componentstatic class EmailService{private static final Logger log = LoggerFactory.getLogger(EmailService.class);@EventListenerpublic void listener(MyEvent event) {log.debug("发送邮件");}}

打印结果:

   2.采用多线程的方式

    (1)首先定义一个任务执行器

             设置线程池的对应参数

    @Beanpublic ThreadPoolTaskExecutor executor(){ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(3);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);return executor;}

  (2)注入SimpleApplicationEventMulticaster对象

         Spring是使用SimpleApplicationEventMulticaster对象广播事件的,默认是同步实现,其中有一个属性是Executor对象,可以替换为上面我们自己注入的Bean对象,实现多线程广播。

    @Beanpublic SimpleApplicationEventMulticaster applicationEventMulticaster(ThreadPoolTaskExecutor executor){SimpleApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster();multicaster.setTaskExecutor(executor);return multicaster;}

       其中方法名必须为applicationEventMulticaster,不然不能覆盖原先的事件广播器,起不到覆盖的作用。

结果如下:

这样支线任务就采用多线程的方式实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96376.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96376.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96376.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)

一、简介该篇代码实现了ESP8266上传数据到云平台的功能(可以更改命令和温度的数据),我只测试了上传数据,是没有问题的,如果自己由别的需求可以自行在云平台创建设备和更改代码:二、工程源码这个代码是进行验…

城际班车驾驶员安全学习课程

背景 正在做一个班车预约小程序,里面需要增加一个功能:驾驶员在线学习打卡功能: 图文学习内容,学习完之后,一键打卡:学习完毕;视频学习内容,看完后,一键打卡&#xff1…

Cy5-Tyramide, Cyanine 5 Tyramide;1431148-26-3

一、基本内容: Cyanine 5 Tyramide (Tyramide-Cy5) 是一种红色荧光染料,被用作辣根过氧化物酶 HRP 催化沉积的报告荧光底物,是一种免疫测定和核酸原位杂交中的信号放大技术。 英文名称:Cy5-Tyramide, Cyanine 5 Tyramide中文名称…

5.1 机器学习 - 模型调参

模型调参是提升泛化能力的关键步骤,核心分为 “人工调参”(依赖经验与实验管理)和 “自动调参”(依赖算法与算力),二者适用场景不同,需结合数据量、算力资源和项目周期选择。 一、人工调整超参数…

音视频技术全景:从采集到低延迟播放的完整链路解析

一、为什么需要音视频知识普及 在当下的数字化时代,音视频已经不再是单纯的“附属功能”,而是成为教育、医疗、安防、金融、低空经济、工业互联网等领域的核心生产要素。一条视频链路的质量,直接决定了课堂能否互动顺畅、手术能否远程指导、…

Mybatis常见问题

Mybatis常见问题 什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语…

Redis(主从复制)

目录 一 为什么要有主从 Redis 二 主从模式 1. 什么是主从模式? 2. 相关操作 3. 查看主从信息: 4. 断开与主节点的关系: 5. 主从结构: 6. 建立主从结构流程: 7. 全量/增量复制流程: 1. 全量复制 …

算法与数据结构实战技巧:从复杂度分析到数学优化

算法与数据结构实战技巧:从复杂度分析到数学优化 引言:为什么算法能力决定你的代码“天花板” 作为程序员,你是否曾遇到这样的困惑:同样是处理数据,别人的代码能轻松扛住10万并发请求,而你的系统在1万数据量…

vue3中 ref() 和 reactive() 的区别

在 Vue 3 中,ref() 和 reactive() 是两种核心的响应式 API,用于创建和管理响应式数据。它们各有适用场景,理解它们的区别和用法对开发至关重要。以下是详细对比和示例:1. ref() 的用法1.1 基本概念ref() 用于创建一个响应式引用&a…

告别加班!这款Axure移动端元件库,让你原型效率提升300%

一、 产品概述 这是一套专为 Axure RP 9/10/11 设计的高质量、高保真移动端(APP)组件库。它旨在帮助产品经理、UI/UX 设计师和交互设计师快速、高效地绘制出美观且交互丰富的移动端原型,极大提升设计效率和原型保真度。 二、 核心内容与特点…

深入理解synchronized:从使用到原理的进阶指南

目录 一、核心机制深度解析 1. 对象头(Object Header)与Mark Word的奥秘 2. Monitor:同步的实质 二、锁升级的全过程与底层操作 1. 无锁 -> 偏向锁 2. 偏向锁 -> 轻量级锁 3. 轻量级锁 -> 重量级锁 三、高级话题与实战调优 …

4.1 - 拖链电缆(柔性电缆)与固定电缆

本文介绍固定电缆和拖链专用线缆的对比、以及使用注意事项。尤其是在伺服的电缆选型上,一定要注意。总结成两点:1). 在移动场合,一定要选用拖链电缆,不要用普通电缆去代替,否则很快就会损坏,甚至造成安全隐…

S32K3平台eMIOS 应用说明

S32K3 系列 eMIOS 介绍 1.1 资源介绍 该设备具有 3 个 eMIOS 模块,每个模块的配置如表 1.1 所示。1.2 功能介绍 eMIOS 提供了用于生成或测量时间事件的功能。它使用 UCs,您可以为不同的芯片应 用中的不同功能进行编程。此外,eMIOS 体系结构允…

Next.js中服务器端渲染 (SSR) 详解:动态内容与 SEO 的完美结合

Next.js中服务器端渲染 (SSR) 详解:动态内容与 SEO 的完美结合 作者:码力无边在上一篇文章中,我们深入探讨了静态站点生成 (SSG) 的强大之处,它通过在构建时预先生成页面,为用户提供了极致的访问速度。但现实世界是动态…

c# winform 使用DevExpress制作表格

环境配置创建c# winform 新项目 test_devexpress添加引用把DevExpress.XtraGrid.v17.1.dll拖到工具箱在界面中&#xff0c;加入2个 GridControl设计器代码&#xff1a;namespace test_devexpress {partial class Form1{/// <summary>/// 必需的设计器变量。/// </summ…

数据库之间如何同步

数据库之间如何同步&#xff1a;三种高效方法详解 数据同步无小事&#xff0c;选对方法事半功倍 在现代数据驱动的环境中&#xff0c;​​数据库之间如何同步​​是确保业务连续性和数据一致性的核心技术。本文将深入介绍三种主流的数据库同步方法&#xff0c;帮助您根据实际需…

《我的世界》中实现强化学习(RL)算法

在《我的世界》中实现强化学习&#xff08;RL&#xff09;是一个巨大的挑战&#xff0c;而奖励函数&#xff08;Reward Function&#xff09;的设计是其中最核心、最困难的部分&#xff0c;直接决定了算法能否成功学习。 下面我将为你提供一个系统的设计框架、策略和注意事项。…

智能光场:深度学习重构计算光学成像新范式!

1.掌握深度学习算法的原理和应用&#xff0c;剖析计算成像主流研究范围及关联的统一计算范式&#xff0c;能够运用深度学习技术对光学成像系统进行创新设计和优化。2.掌握利用深度学习从成像设备优化设计、典型计算成像任务以及后端的计算机视觉任务的认知框架&#xff0c;并掌…

深入理解 MyBatis-Plus 的 QueryWrapper:动态 SQL 构建的利器

关键词&#xff1a;MyBatis-Plus、QueryWrapper、动态 SQL、Java、ORM 一、引言 在 Java 后端开发中&#xff0c;MyBatis-Plus&#xff08;简称 MP&#xff09;作为 MyBatis 的增强工具&#xff0c;极大地简化了 CRUD 操作。而其中最核心的功能之一&#xff0c;就是动态 SQL 的…

WMIC用法

WMIC用法基本语法结构1. 全局开关&#xff08;可选&#xff0c;控制整体行为&#xff09;2. 别名&#xff08;Alias&#xff09;3. 动词&#xff08;Verb&#xff09;4. 参数&#xff08;可选&#xff09;常用示例帮助命令WMIC&#xff08;Windows Management Instrumentation …