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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

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

很簡單并且很常見的一段業(yè)務(wù)邏輯:首先將產(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è)務(wù)需求的變化,代碼也需要跟著一遍遍的修改。而且還會存在另外一個問題,如果通知系統(tǒng)掛了,那就不能再新增產(chǎn)品了。

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

Spring提供了事件驅(qū)動機(jī)制可以幫助我們實現(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)聽事件

這里需要特別注意一點,默認(rèn)情況下事件是同步的。即事件被publish后會等待Listener的處理。如果發(fā)布事件處的業(yè)務(wù)存在事務(wù),監(jiān)聽器處理也會在相同的事務(wù)中。如果需要異步處理事件,可以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后會使用默認(rèn)的線程池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:當(dāng)pool已經(jīng)達(dá)到max size的時候,如何處理新任務(wù)// CALLER_RUNS:不在新線程中執(zhí)行任務(wù),而是由調(diào)用者所在的線程來執(zhí)行executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor; }}

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

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品国产精品粉嫩| 最近高清中文在线字幕在线观看1| 午夜在线一区| 欧美日韩1区| 桃色av一区二区| 亚洲成av人片一区二区密柚| 亚洲欧美日韩国产综合精品二区 | 91精品蜜臀一区二区三区在线| 99久久婷婷这里只有精品| 综合亚洲视频| 日韩精品永久网址| 石原莉奈在线亚洲三区| 国内在线观看一区二区三区 | 久久香蕉网站| 欧美~级网站不卡| 国产精品2区| 夜夜嗨一区二区三区| 精品伊人久久| 亚洲毛片视频| 久久视频精品| 国产精品a级| 日韩1区2区3区| 在线一区av| 欧美黑人巨大videos精品| 亚洲激精日韩激精欧美精品| 国产 日韩 欧美 综合 一区| 亚洲精品伊人| 99国产精品免费视频观看| 欧美黄页在线免费观看 | 日韩免费小视频| 国产精品乱战久久久| 国产精品社区| 婷婷成人在线| 精品国产麻豆| 国产精品chinese| 18国产精品| 日韩在线网址| 亚洲精品伊人| 午夜在线观看免费一区| 国产一区二区三区自拍| 天堂√中文最新版在线| 美女久久久久久| 日韩高清不卡一区| 蜜桃视频在线观看一区二区| 亚洲尤物在线| 99在线观看免费视频精品观看| 亚洲风情在线资源| 国产伦久视频在线观看| 精品久久精品| 欧美激情福利| 日本精品另类| 亚洲精品乱码久久久久久蜜桃麻豆| 午夜精品成人av| 久久久久欧美精品| 亚洲午夜天堂| 日韩精品欧美| 亚洲伊人av| 99视频精品视频高清免费| 牛牛精品成人免费视频| 国产欧美激情| 精品国产亚洲日本| 福利一区视频| 99久久久久国产精品| 日韩精品网站| 黄色免费成人| 午夜电影亚洲| 99国产一区| 亚洲乱码视频| 国产欧美日韩影院| 日韩三区四区| 日韩av一级片| 麻豆高清免费国产一区| 国产精品二区影院| 国产一区二区三区探花| av资源新版天堂在线| 91精品精品| 在线看片不卡| 亚洲综合日韩| 日本亚洲不卡| 免费一级欧美片在线观看网站| 久久久国产精品入口麻豆| 国产资源在线观看入口av| 日韩在线综合| 亚洲国产日韩欧美在线| 日韩精品一二三四| 午夜亚洲福利| 国产精选久久| 日韩免费视频| 99久久久久国产精品| 麻豆91精品| 国产精品天天看天天狠| 91一区二区三区四区| 午夜av一区| 日韩国产一二三区| 久久久久观看| 国产麻豆久久| 日本亚洲不卡| 国产+成+人+亚洲欧洲在线| 天堂资源在线亚洲| 亚洲天堂av资源在线观看| 日韩中文av| 日韩中文欧美| 婷婷亚洲精品| 亚洲综合电影| 亚洲1区在线观看| 久久精品毛片| 激情婷婷亚洲| 欧美日韩亚洲国产精品| 日韩在线观看不卡| 日韩va欧美va亚洲va久久| 亚洲综合在线电影| 一区二区三区四区日韩| 国产精品2023| 日韩精品诱惑一区?区三区| 中文字幕一区二区三区日韩精品 | 蜜桃久久av| 国产成人精品亚洲线观看| 亚洲综合国产| 91中文字幕精品永久在线| 亚洲色图网站| 久久精品免费一区二区三区 | 亚洲欧美日韩在线观看a三区| 日韩精品免费视频人成| 国精品产品一区| 最新国产精品| 亚洲无线一线二线三线区别av| 免费的成人av| 天堂网av成人| 国产一区二区三区亚洲综合| 日韩激情av在线| 亚洲精品在线影院| 欧美日本一区| 免费观看在线色综合| 精品丝袜久久| 日本不卡在线视频| 亚洲精华国产欧美| 97欧美在线视频| 国产日本精品| 美国三级日本三级久久99| 久久久夜夜夜| 国产一区二区三区黄网站| 日本中文字幕一区二区| 亚洲a一区二区三区| 精品久久久久久久| 国产精品v日韩精品v欧美精品网站| 香蕉成人久久| 日韩精品免费一区二区三区| 精品国产亚洲日本| 日本一不卡视频| 伊人影院久久| 欧美色综合网| 国产一级久久| 亚洲婷婷在线| 久久精品在线| 91青青国产在线观看精品| 日韩综合一区二区| 99re国产精品| 午夜日韩av| 国产一区二区三区精品在线观看| 亚洲欧洲日韩精品在线| 秋霞影院一区二区三区| 麻豆成人91精品二区三区| 久久av日韩| 国产精品magnet| 青草国产精品久久久久久| 亚洲精品无吗| 日本午夜精品一区二区三区电影| 美日韩精品视频| 免费人成在线不卡| 视频一区在线播放| 热久久免费视频| 免费观看在线色综合| 亚洲一卡久久| 美国av一区二区| 亚洲欧洲国产精品一区| 亚洲影视一区二区三区| 视频在线在亚洲| 蜜臀精品一区二区三区在线观看 | 日本大胆欧美人术艺术动态| 国产精品免费看| 丝袜美腿成人在线| 亚洲精选91| 欧美亚洲tv| 久久久亚洲欧洲日产| 国产精品久久久久久av公交车 | 欧美一区自拍| 国产在线一区不卡| 久久久久久色| 国产精品久久久久久久久免费高清 | 麻豆传媒一区二区三区| 欧美激情aⅴ一区二区三区| 国产调教精品| 国产精品17p| 欧美丰满日韩| 在线成人动漫av| 亚洲精品在线观看91| 亚洲欧美视频| 欧美日韩一区二区三区不卡视频 | 中日韩男男gay无套| 国产婷婷精品|