Spring事件監聽機制(二)

? ? ? 接著之前的事件監聽機制實現,我們可以進一步優化。從以下兩個方面:

? ? ?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 …