日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Spring事件如何異步執行?

來源: 責編: 時間:2024-03-18 09:42:49 237觀看
導讀環境:SpringBoot2.7.161. 簡介ApplicationContext 中的事件處理是通過 ApplicationEvent 類和 ApplicationListener 接口提供的。如果在上下文中部署了實現 ApplicationListener 接口的 Bean,那么每次 ApplicationEvent

環境:SpringBoot2.7.16hhT28資訊網——每日最新資訊28at.com

1. 簡介

ApplicationContext 中的事件處理是通過 ApplicationEvent 類和 ApplicationListener 接口提供的。如果在上下文中部署了實現 ApplicationListener 接口的 Bean,那么每次 ApplicationEvent 發布到 ApplicationContext 時,都會通知該 Bean。從本質上講,這就是標準的觀察者設計模式。hhT28資訊網——每日最新資訊28at.com

hhT28資訊網——每日最新資訊28at.com

從Spring 4.2開始,事件基礎設施得到了顯著改進,并提供了基于注釋的模型以及發布任意事件的能力(也就是說,不一定是從ApplicationEvent擴展的對象)。當這樣的對象被發布時,我們將它包裝在一個事件中。hhT28資訊網——每日最新資訊28at.com

hhT28資訊網——每日最新資訊28at.com

以下是一個簡單的事件應用hhT28資訊網——每日最新資訊28at.com

1.1 定義事件對象

public class PackEvent extends ApplicationEvent {  private static final long serialVersionUID = 1L;  public PackEvent(Object source) {    super(source);  }}

1.2 定義事件監聽

@Componentpublic class PackEventListener implements ApplicationListener<PackEvent> {  @Override  public void onApplicationEvent(PackEvent event) {    System.out.println("觸發事件...") ;  }}

1.3 發布事件

@Resourceprivate ApplicationEventMulticaster eventMulticaster ;public void run(ApplicationArguments args) throws Exception {  eventMulticaster.multicastEvent(new PackEvent("自定義Pack")) ;}

以上Spring事件系統的完整應用實例。在默認情況下該種事件處理方式是同步的,也就是事件的發布者與事件的處理都是同一個線程中,那這就要求我們的事件處理程序不應該處理復雜耗時的任務,否則會影響我們的主業務系統。那如何異步處理事件呢?hhT28資訊網——每日最新資訊28at.com

2. 事件異步處理

2.1 通過@Async注解

該種方式是最簡單的方式了,開啟異步功能,在基于注解的事件監聽方法上使用@Async注解。hhT28資訊網——每日最新資訊28at.com

開啟異步任務功能更hhT28資訊網——每日最新資訊28at.com

@EnableAsyncpublic class AppApplication {}

基于注解事件監聽hhT28資訊網——每日最新資訊28at.com

@Async@EventListener({PackEvent.class})public void packEventListener(PackEvent event) {  System.out.printf("%s - 事件發生了...%s%n", Thread.currentThread().getName(), event.getSource()) ;}

執行結果hhT28資訊網——每日最新資訊28at.com

task-1 - 事件發生了...自定義Pack

線程名已經變為了task-1。task-前綴是異步線程的默認名。關于異步任務執行應用的線程池配置,查看下面這篇文章。hhT28資訊網——每日最新資訊28at.com

Spring任務調度&異步任務&Web異步請求三者如何配置線程池?hhT28資訊網——每日最新資訊28at.com

上面是基于注解的方式應用異步執行事件處理。對于在簡介中通過實現ApplicationListener接口的方式又該如何處理呢?hhT28資訊網——每日最新資訊28at.com

對于這種方式,我們可以通過兩種方式進行處理:hhT28資訊網——每日最新資訊28at.com

2.2 自定義線程池

  • 在事件監聽處理程序中開啟異步線程
@Componentpublic class PackEventListener implements ApplicationListener<PackEvent> {  @Override  public void onApplicationEvent(PackEvent event) {    new Thread(() -> {      System.out.printf("%s觸發事件...%n", Thread.currentThread().getName()) ;    }).start() ;  }}
  • 自定義事件廣播器
@BeanTaskExecutor taskExecutor() {  ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor() ;  taskExecutor.setThreadNamePrefix("pack-event-") ;  taskExecutor.setCorePoolSize(5) ;  taskExecutor.setQueueCapacity(100) ;  taskExecutor.setMaxPoolSize(5) ;  taskExecutor.initialize() ;  return taskExecutor ;}// 注意beanName必須為applicationEventMulticaster;下面的源碼中你將看到@Bean(name  = AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME)SimpleApplicationEventMulticaster eventMulticaster(BeanFactory beanFactory) {  SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster(beanFactory) ;  eventMulticaster.setTaskExecutor(taskExecutor()) ;  return eventMulticaster ;}

通過這種方式也可以實現事件處理程序異步執行。而這種方式的實現原理如下:hhT28資訊網——每日最新資訊28at.com

容器啟動中的核心方法refresh中hhT28資訊網——每日最新資訊28at.com

public abstract class AbstractApplicationContext {  public void refresh() {    // 初始化事件廣播器    initApplicationEventMulticaster();  }  protected void initApplicationEventMulticaster() {    ConfigurableListableBeanFactory beanFactory = getBeanFactory();    // 判斷容器中是否存在beanName=applicationEventMulticaster    if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {      this.applicationEventMulticaster =          beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);    } else {      // 如果不存在則創建一個同步的執行器。      this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);      beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);    }  }}

以上是本篇文章的全部內容,希望對你有幫助。hhT28資訊網——每日最新資訊28at.com

完畢!!!hhT28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-76561-0.htmlSpring事件如何異步執行?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Spring中Cron表達式的優雅實現方案

下一篇: OpenFeign奪命連環九問

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
在线免费观看视频一区| 欧美网站在线观看| 亚洲欧美日韩另类| 亚洲女性喷水在线观看一区| 久久成人国产| 免费视频亚洲| 国产精品久久久久久久久免费樱桃| 国产精品一区二区在线观看| 黄色免费成人| 亚洲伦理在线观看| 午夜在线一区二区| 榴莲视频成人在线观看| 欧美日韩一区二区在线播放| 国产欧美亚洲视频| 亚洲精品视频在线观看免费| 新狼窝色av性久久久久久| 老色鬼久久亚洲一区二区| 欧美体内she精视频在线观看| 国产一区二区三区在线观看网站 | 伊人影院久久| 中文在线资源观看网站视频免费不卡 | 欧美一区二区啪啪| 欧美成人一区二区在线| 国产毛片一区二区| 91久久精品一区| 性久久久久久久| 欧美连裤袜在线视频| 国产欧亚日韩视频| 日韩一区二区精品在线观看| 久久精品久久综合| 欧美色图五月天| 亚洲高清视频一区二区| 午夜精品理论片| 欧美另类极品videosbest最新版本 | 欧美日韩免费| 极品尤物一区二区三区| 亚洲女爱视频在线| 欧美精品国产精品| 精品不卡在线| 亚洲自拍偷拍福利| 欧美激情中文不卡| 黄色成人免费观看| 午夜精品福利在线| 欧美日韩妖精视频| 亚洲黄一区二区| 久久久久久9| 国产乱码精品| 亚洲天堂免费观看| 欧美精品在线网站| 亚洲国产经典视频| 久久精品人人| 国产欧美日韩在线| 亚洲视频在线免费观看| 欧美激情一区二区三区四区| 亚洲第一中文字幕在线观看| 久久国产精品亚洲77777| 国产精品美女视频网站| 一区二区三区国产精品| 欧美精品久久久久久久| 亚洲福利视频一区| 久久亚洲综合色| 国内偷自视频区视频综合| 性久久久久久| 国产精品一区二区男女羞羞无遮挡 | 午夜欧美理论片| 国产精品爱啪在线线免费观看| 亚洲免费播放| 欧美国产一区二区| 亚洲国产欧美国产综合一区| 久久久在线视频| 狠狠爱成人网| 久久九九全国免费精品观看| 国产日韩在线一区二区三区| 午夜精品久久久久久久男人的天堂| 国产精品每日更新| 亚洲综合色丁香婷婷六月图片| 国产精品成人一区二区| 亚洲无限乱码一二三四麻| 欧美视频在线一区二区三区| 日韩一级黄色大片| 欧美区在线观看| 99www免费人成精品| 欧美日韩国产999| 一区二区三区黄色| 国产精品草草| 亚洲欧美99| 国产欧美一区二区精品性色| 欧美影院一区| 韩国成人精品a∨在线观看| 久久久久久网址| 揄拍成人国产精品视频| 欧美www视频| 日韩视频不卡中文| 欧美四级伦理在线| 午夜久久久久久| 国内精品一区二区| 蜜桃av一区二区三区| 91久久精品国产91久久性色tv| 欧美片第一页| 亚洲欧美成人一区二区在线电影| 国产日韩精品视频一区二区三区| 久久精品国内一区二区三区| 在线观看欧美精品| 欧美精品www| 亚洲一区二区三区四区在线观看 | 99精品国产热久久91蜜凸| 欧美日韩人人澡狠狠躁视频| 亚洲性夜色噜噜噜7777| 国产女精品视频网站免费 | 亚洲一区二区毛片| 国产欧美不卡| 麻豆国产va免费精品高清在线| 99视频一区| 国产日韩专区| 欧美成人高清| 亚洲一区二区网站| 国内自拍亚洲| 欧美日产国产成人免费图片| 亚洲欧美高清| 亚洲第一黄色网| 国产精品电影网站| 久久黄色级2电影| 亚洲人被黑人高潮完整版| 欧美视频在线观看一区二区| 欧美怡红院视频| 亚洲精品欧美| 国产女精品视频网站免费| 蜜臀91精品一区二区三区| 一区二区三区四区在线| 国产一区二区视频在线观看| 欧美精品精品一区| 午夜久久美女| 最新日韩在线视频| 国产乱码精品1区2区3区| 嫩模写真一区二区三区三州| 亚洲视频在线二区| 在线精品国产欧美| 国产精品video| 久久久久久久网| 中日韩美女免费视频网站在线观看| 国内精品久久久久久久影视麻豆| 欧美日本精品一区二区三区| 久久国产精品一区二区| 亚洲美女av在线播放| 国产一区二区三区在线观看网站| 欧美日韩在线三级| 久久一区二区精品| 亚洲午夜在线观看视频在线| 亚洲电影中文字幕| 国产乱码精品一区二区三区忘忧草| 欧美国产精品人人做人人爱| 欧美一区二区三区在线观看视频| 亚洲美女淫视频| 精品9999| 国产日韩在线一区| 国产精品高潮呻吟久久av黑人| 欧美福利专区| 久久久女女女女999久久| 亚洲欧美精品中文字幕在线| 亚洲精品一区二区网址| 激情综合色综合久久| 国产精品视频99| 欧美日韩国产bt| 欧美高清一区| 久久综合综合久久综合| 久久黄色网页| 亚洲女性裸体视频| 亚洲桃色在线一区| 亚洲乱码国产乱码精品精98午夜 | 亚洲第一精品夜夜躁人人躁| 国产日韩精品一区二区三区| 欧美午夜一区二区| 欧美精选午夜久久久乱码6080| 久久综合999| 久久er精品视频| 亚洲综合色噜噜狠狠| 99精品99| 亚洲精品久久7777| 精品成人国产| 狠狠色伊人亚洲综合网站色| 国产美女精品视频| 国产精品福利av| 欧美视频一区二区在线观看 | 欧美mv日韩mv国产网站app| 久久九九有精品国产23| 久久aⅴ国产欧美74aaa| 午夜天堂精品久久久久| 亚洲综合视频网| 亚洲一区二区在线视频| 中文av一区特黄| 亚洲最新在线视频| 亚洲精品一区二区三区在线观看| 91久久黄色| 亚洲精品日韩在线观看| 亚洲人成网站色ww在线| 亚洲欧洲另类国产综合| 亚洲国产一区在线观看| 亚洲激情亚洲| 亚洲欧洲日本专区| 亚洲精品视频二区| 亚洲美女精品久久| a91a精品视频在线观看| 一区二区三区精品在线| 亚洲特黄一级片|