日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot實現(xiàn)異步事件驅(qū)動的方法

瀏覽:165日期:2023-03-01 08:04:44
目錄Spring事件驅(qū)動源碼實戰(zhàn)

在項目實際開發(fā)過程中,我們有很多這樣的業(yè)務場景:一個事務中處理完一個業(yè)務邏輯后需要跟著處理另外一個業(yè)務邏輯,偽碼大致如下:

@Servicepublic class ProductServiceImpl { ... public void saveProduct(Product product) {productMapper.saveOrder(product);notifyService.notify(product); } ...}

很簡單并且很常見的一段業(yè)務邏輯:首先將產(chǎn)品先保存數(shù)據(jù)庫,然后發(fā)送通知。

某一天你們可能需要把新增的產(chǎn)品存到Es中,這時候也需要代碼可能變成這樣:

@Servicepublic class ProductServiceImpl { ... public void saveProduct(Product product) {productMapper.saveProduct(product);esService.saveProduct(product)notifyService.notify(product); } ...}

隨著業(yè)務需求的變化,代碼也需要跟著一遍遍的修改。而且還會存在另外一個問題,如果通知系統(tǒng)掛了,那就不能再新增產(chǎn)品了。

對于上面這種情況非常適合引入消息中間件(消息隊列)來對業(yè)務進行解耦,但并非所有的業(yè)務系統(tǒng)都會引入消息中間件(引入會第三方架構組件會帶來很大的運維成本)。

Spring提供了事件驅(qū)動機制可以幫助我們實現(xiàn)這一需求。

Spring事件驅(qū)動

spring事件驅(qū)動由3個部分組成

ApplicationEvent:表示事件本身,自定義事件需要繼承該類,用來定義事件 ApplicationEventPublisher:事件發(fā)送器,主要用來發(fā)布事件 ApplicationListener:事件監(jiān)聽器接口,監(jiān)聽類實現(xiàn)ApplicationListener 里onApplicationEvent方法即可,也可以在方法上增加@EventListener以實現(xiàn)事件監(jiān)聽。

實現(xiàn)Spring事件驅(qū)動一般只需要三步:

自定義需要發(fā)布的事件類,需要繼承ApplicationEvent類 使用ApplicationEventPublisher來發(fā)布自定義事件 使用@EventListener來監(jiān)聽事件

這里需要特別注意一點,默認情況下事件是同步的。即事件被publish后會等待Listener的處理。如果發(fā)布事件處的業(yè)務存在事務,監(jiān)聽器處理也會在相同的事務中。如果需要異步處理事件,可以onApplicationEvent方法上加@Aync支持異步或在有@EventListener的注解方法上加上@Aync。

源碼實戰(zhàn)

創(chuàng)建事件

public class ProductEvent extends ApplicationEvent { public ProductEvent(Product product) {super(product); }}

發(fā)布事件

@Servicepublic class ProductServiceImpl implements IproductService { ... @Autowired private ApplicationEventPublisher publisher; @Override @Transactional(rollbackFor = Exception.class) public void saveProduct(Product product) { productMapper.saveProduct(product); //事件發(fā)布publisher.publishEvent(product); } ...}

事件監(jiān)聽

@Slf4j@AllArgsConstructorpublic class ProductListener { private final NotifyService notifyServcie; @Async @Order @EventListener(ProductEvent.class) public void notify(ProductEvent event) { Product product = (Product) event.getSource(); notifyServcie.notify(product, 'product'); }}

在SpringBoot啟動類上增加@EnableAsync 注解

@Slf4j@EnableSwagger2@SpringBootApplication@EnableAsyncpublic class ApplicationBootstrap {...}

使用了Async后會使用默認的線程池SimpleAsyncTaskExecutor,一般我們會在項目中自定義一個線程池。

@Configurationpublic class ExecutorConfig { /** 核心線程數(shù) */ private int corePoolSize = 10; /** 最大線程數(shù) */ private int maxPoolSize = 50; /** 隊列大小 */ private int queueCapacity = 10; /** 線程最大空閑時間 */ private int keepAliveSeconds = 150; @Bean('customExecutor') public Executor myExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize);executor.setQueueCapacity(queueCapacity);executor.setThreadNamePrefix('customExecutor-');executor.setKeepAliveSeconds(keepAliveSeconds);// rejection-policy:當pool已經(jīng)達到max size的時候,如何處理新任務// CALLER_RUNS:不在新線程中執(zhí)行任務,而是由調(diào)用者所在的線程來執(zhí)行executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor; }}

到此這篇關于SpringBoot實現(xiàn)異步事件驅(qū)動的方法的文章就介紹到這了,更多相關SpringBoot 異步事件驅(qū)動內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国内亚洲精品| 日韩精品三区四区| 日本国产亚洲| 日韩成人一级| 青青草国产成人99久久| 日韩一区精品| 在线视频精品| 亚洲专区在线| 国产欧美三级| 成人国产精选| 国产99精品一区| 石原莉奈在线亚洲三区| 久久国产三级| 98精品视频| 婷婷激情综合| 综合一区在线| 久久69成人| 亚洲精品888| 日本视频中文字幕一区二区三区| 国产日产高清欧美一区二区三区| 精品欧美日韩精品| а√天堂8资源在线| 久久精品国产www456c0m| 国产农村妇女精品一区二区| 亚洲狼人精品一区二区三区| 欧美国产另类| 亚洲欧洲一区二区天堂久久| 91亚洲精品视频在线观看| 精品一区二区三区四区五区| 亚洲性色视频| 欧美精品第一区| 午夜精品网站| 麻豆精品一区二区综合av| 久久精品高清| 欧美激情亚洲| 亚洲一级淫片| yellow在线观看网址| 久久国产精品久久w女人spa| 精品视频在线你懂得| 一区二区精品| 日韩久久精品网| 日本在线观看不卡视频| 欧美1级日本1级| 精品九九在线| 日韩在线观看一区二区三区| 欧美sm一区| 精品亚洲二区| 国产剧情一区二区在线观看| 三级欧美在线一区| 91精品精品| 国产在线观看91一区二区三区 | 欧美日韩一区二区三区四区在线观看 | 国产精品多人| 日本亚洲视频| 日韩在线一二三区| 欧美日韩中文一区二区| 日韩精品1区| 99成人超碰| 精品国产免费人成网站| 精品成av人一区二区三区| 国产精品tv| 国产精品www994| 精品不卡一区| 另类专区亚洲| 啪啪国产精品| 日韩精品2区| 久久国产欧美| 久久久一本精品| sm久久捆绑调教精品一区| 日韩久久精品网| 日韩不卡在线| 影音先锋久久| 色8久久久久| 亚洲v天堂v手机在线| 中文字幕av一区二区三区人| 免费观看日韩电影| 综合干狼人综合首页| 国产精品欧美三级在线观看 | 99视频精品全国免费| 人人精品亚洲| 红桃视频国产精品| 亚洲欧美日韩专区| 日韩和欧美的一区| 国产精品网站在线看| av最新在线| 亚洲成人一区在线观看| 激情欧美日韩一区| 亚洲ww精品| 麻豆网站免费在线观看| www在线观看黄色| 婷婷激情图片久久| 亚洲欧洲免费| 日韩伦理福利| 日韩中文字幕91| 国产精品亚洲一区二区在线观看| 国产成人久久| 亚洲欧洲一区二区天堂久久| 日本不卡视频在线| 国产精品专区免费| 丝袜国产日韩另类美女| 人人精品久久| 色婷婷狠狠五月综合天色拍| 中文字幕中文字幕精品| 国产在视频一区二区三区吞精| 99热精品在线| 久久亚洲国产精品尤物| 亚洲激情另类| 国产一区二区三区四区大秀| 亚洲欧美日韩在线观看a三区| 精品视频免费| 日韩美女精品| 欧美91精品| 久久精品国产精品亚洲毛片| 日韩专区一卡二卡| 五月国产精品| 久久人人99| 精品久久影院| 欧美午夜三级| 亚洲深爱激情| 天堂√中文最新版在线| 国产精品久久国产愉拍| 久久国产精品久久久久久电车| 国产理论在线| 久久精品国产精品亚洲毛片| 日韩黄色av| 天堂av一区| 日韩在线成人| 婷婷成人av| 日韩高清一区在线| 亚洲精品自拍| 亚洲乱码一区| 亚洲国产不卡| 亚洲福利专区| 久久久久久美女精品| 成人片免费看| 日韩在线精品| 亚洲韩日在线| 一本色道久久精品| 亚洲一区二区网站| 99香蕉国产精品偷在线观看| 亚洲精品午夜av福利久久蜜桃| 久久激情网站| 午夜日本精品| 蜜桃视频一区二区| 婷婷五月色综合香五月| 欧美日一区二区三区在线观看国产免| 亚洲精品一区二区在线看| 一本一道久久a久久精品蜜桃| 日韩欧美一区二区三区在线观看| 成人在线视频中文字幕| 亚洲二区精品| 日本在线成人| 国产一区二区三区不卡视频网站 | 婷婷综合在线| 性欧美xxxx免费岛国不卡电影| 日韩一区二区免费看| 日韩在线观看中文字幕| 精品国内亚洲2022精品成人| 久久中文字幕二区| 亚洲欧美在线专区| 欧美国产免费| 日韩视频二区| 国产精品igao视频网网址不卡日韩 | 国产麻豆综合| 国产精品成人**免费视频 | 国产精品7m凸凹视频分类| 日韩专区欧美专区| 精品视频亚洲| 午夜性色一区二区三区免费视频| 久久亚洲黄色| 国产日韩专区| 精品色999| 亚洲在线久久| 婷婷成人在线| 国产精品羞羞答答在线观看| 日韩精品一区二区三区免费观影 | 日日夜夜免费精品视频| 麻豆久久久久久久| 欧美另类专区| 91一区二区三区四区| 免费看日韩精品| 午夜影院一区| 亚洲精品字幕| 欧美亚洲精品在线| 日韩中文在线电影| 欧美国产日韩电影| 热久久久久久| 中文字幕免费精品| 中文字幕日韩高清在线| 91久久在线| 国产亚洲毛片在线| 午夜日本精品| 一本一本久久| 午夜一区在线| 视频一区二区国产| 亚洲一区二区三区无吗| 国产精品毛片在线看| 久久中文视频| 久久只有精品| 麻豆精品视频在线|