Spring Boot Event 觀察者模式,輕松帶你實(shí)現(xiàn)業(yè)務(wù)解耦!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
寫(xiě)在最前
實(shí)際業(yè)務(wù)開(kāi)發(fā)過(guò)程中,業(yè)務(wù)邏輯可能非常復(fù)雜,核心業(yè)務(wù) + N個(gè)子業(yè)務(wù)。如果都放到一塊兒去做,代碼可能會(huì)很長(zhǎng),耦合度不斷攀升,維護(hù)起來(lái)也麻煩,甚至頭疼。還有一些業(yè)務(wù)場(chǎng)景不需要在一次請(qǐng)求中同步完成,比如郵件發(fā)送、短信發(fā)送等。
MQ 確實(shí)可以解決這個(gè)問(wèn)題,但 MQ 重啊,非必要不提升架構(gòu)復(fù)雜度。針對(duì)這些問(wèn)題,我們了解一下 Spring Event。
Spring Event 同步使用
Spring Event(Application Event)其實(shí)就是一個(gè)觀察者設(shè)計(jì)模式,一個(gè) Bean 處理完成任務(wù)后希望通知其它 Bean 或者說(shuō)一個(gè) Bean 想觀察監(jiān)聽(tīng)另一個(gè)Bean 的行為。
推薦一個(gè) Spring Boot 基礎(chǔ)實(shí)戰(zhàn)教程:
https://github.com/javastacks/spring-boot-best-practice
1.自定義事件
定義事件,繼承ApplicationEvent的類(lèi)成為一個(gè)事件類(lèi)

2.定義監(jiān)聽(tīng)器
監(jiān)聽(tīng)并處理事件,實(shí)現(xiàn)ApplicationListener接口或者使用@EventListener注解

3.定義發(fā)布者
發(fā)布事件,通過(guò)ApplicationEventPublisher發(fā)布事件

4.單測(cè)執(zhí)行

執(zhí)行結(jié)果如下:

Spring Event 異步使用
有些業(yè)務(wù)場(chǎng)景不需要在一次請(qǐng)求中同步完成,比如郵件發(fā)送、短信發(fā)送等。另外,最新面試題整理好了,點(diǎn)擊Java面試庫(kù)小程序在線刷題。
1.自定義事件

2.定義監(jiān)聽(tīng)器
推薦使用@EventListener注解

3.定義發(fā)布者

4.單測(cè)執(zhí)行(同步)

執(zhí)行結(jié)果如下:

5.開(kāi)啟異步
啟動(dòng)類(lèi)增加@EnableAsync注解

Listener類(lèi)需要開(kāi)啟異步的方法增加@Async注解

6.單測(cè)執(zhí)行(異步)
發(fā)送短信的線程顯示task-1,主線程結(jié)束后(總耗時(shí):(2017)毫秒)控制臺(tái)停止打印了

來(lái)源:blog.csdn.net/csp732171109/article/details/124377254
往 期 推 薦
1、拖動(dòng)文件就能觸發(fā)7-Zip安全漏洞,波及所有版本
3、一次 SQL 查詢(xún)優(yōu)化原理分析:900W+ 數(shù)據(jù),從 17s 到 300ms
4、Redis數(shù)據(jù)結(jié)構(gòu)為什么既省內(nèi)存又高效?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看





