亚洲va在线va天堂xxxx中文 ,女子奶水太多喂老头中文字幕,亚洲性啪啪无码av天堂,无码H肉动漫在线观看免费中文

當(dāng)前熱訊:Spring ApplicationEvent事件實(shí)現(xiàn)本地事件驅(qū)動(dòng)

2023-05-06 21:27:22 來(lái)源:清一色財(cái)經(jīng)

TransactionalEventListener,事務(wù)事件監(jiān)聽(tīng),可監(jiān)聽(tīng)事務(wù)提交前、提交后、事務(wù)回滾、事務(wù)完成(成功或失?。?


(資料圖片)

一、介紹

Spring內(nèi)置了簡(jiǎn)便的事件機(jī)制,可以非常方便的實(shí)現(xiàn)事件驅(qū)動(dòng),核心類(lèi)包括

ApplicationEvent,具體事件內(nèi)容,事件抽象基類(lèi),可繼承該類(lèi)自定義具體事件ApplicationEventPublisher,事件發(fā)布器,可以發(fā)布ApplicationEvent,也可以發(fā)布普通的Object對(duì)象ApplicationListener,事件監(jiān)聽(tīng)器,可以使用注解@EventListenerTransactionalEventListener,事務(wù)事件監(jiān)聽(tīng),可監(jiān)聽(tīng)事務(wù)提交前、提交后、事務(wù)回滾、事務(wù)完成(成功或失?。?h3 data-id="h6f20189-i4G6pp9R" id="h6f20189-i4G6pp9R">二、使用示例:不定義事件,直接發(fā)布Object對(duì)象,同步

1、定義發(fā)送事件對(duì)象

public class UserEntity {    private long id;    private String name;    private String msg;}

2、定義事件監(jiān)聽(tīng)器

可以添加條件condition,限制監(jiān)聽(tīng)具體的事件

@Slf4j@Componentpublic class RegisterListener {    @EventListener(condition = "#entity.id != null and #entity.async==false ")    public void handlerEvent(UserEntity entity) {        try {            // 休眠5秒            TimeUnit.SECONDS.sleep(5);        } catch (InterruptedException e) {            e.printStackTrace();        }        log.info("handlerEvent: {}", entity);    }}

3、定義發(fā)送接口以及實(shí)現(xiàn)類(lèi)

public interface IRegisterService {    public void register(String name);}
@Servicepublic class RegisterServiceImpl implements IRegisterService {    @Resource    private ApplicationEventPublisher applicationEventPublisher;    @Override    public void register(String name) {        UserEntity entity = new UserEntity();        entity.setName(name);        entity.setId(1L);        entity.setMsg("新用戶注冊(cè)同步調(diào)用");        applicationEventPublisher.publishEvent(entity);    }}

4、測(cè)試Controller類(lèi),進(jìn)行測(cè)試

@Slf4j@Controllerpublic class TestController {    @Resource    private IRegisterService registerService;    @RequestMapping("test")    @ResponseBody    public void test1(String name) {        registerService.register(name);        log.info("執(zhí)行同步調(diào)用結(jié)束");    }}

在瀏覽器中輸入地址:http://localhost/test?name=nik

控制臺(tái)輸出:

handlerEvent: UserEntity(id=1, name=nik, msg=新用戶注冊(cè)同步調(diào)用)執(zhí)行同步調(diào)用結(jié)束

三、使用示例:異步發(fā)布

1、在啟動(dòng)類(lèi)添加異步注解@EnableAsync

2、在監(jiān)聽(tīng)方法上添加注解@Async

@Async@EventListener(condition = "#entity.name != null and #entity.async ")public void handlerEventAsync(UserEntity entity) {    try {        TimeUnit.SECONDS.sleep(5);    } catch (InterruptedException e) {        e.printStackTrace();    }    log.info("handlerEventAsync: {}", entity);}

3、在service中添加異步發(fā)送方法

@Overridepublic void registerAsyn(String name) {    UserEntity entity = new UserEntity();    entity.setName(name);    entity.setId(1L);    entity.setMsg("新用戶注冊(cè)異步調(diào)用");    entity.setAsync(true);    applicationEventPublisher.publishEvent(entity);}

3、測(cè)試

@RequestMapping("test")@ResponseBodypublic void test(String name) {    registerService.registerAsyn(name);    log.info("執(zhí)行異步調(diào)用結(jié)束");}

控制臺(tái)輸出:

執(zhí)行異步調(diào)用結(jié)束handlerEventAsync: UserEntity(id=1, name=nik, msg=新用戶注冊(cè)異步調(diào)用)

四、使用示例:在事務(wù)提交后發(fā)布事件

比如,用戶注冊(cè)成功后給用戶發(fā)送成功短信,那么注冊(cè)成功必然是注冊(cè)方法事務(wù)提交成功后才代表成功。

Spring提供了注解@TransactionalEventListener監(jiān)聽(tīng)事務(wù)事件,在@EventListener基礎(chǔ)上增加了屬性phase,包含以下四個(gè)值:

AFTER_COMMIT,事務(wù)提交成功后,默認(rèn)BEFORE_COMMIT,事務(wù)提交前AFTER_ROLLBACK,事務(wù)回滾后AFTER_COMPLETION,事務(wù)完成,AFTER_COMMIT或AFTER_ROLLBACK

1、自定義事務(wù)處理事件

public class RegisterCommitEvent extends ApplicationEvent {    @Getter    @Setter    private String msg;    @Getter    @Setter    private String name;    public RegisterCommitEvent(UserEntity source) {        super(source);        this.msg = source.getMsg();        this.name = source.getName();    }}

2、在處理方法上添加事務(wù)注解,@Transactional

@Override@Transactionalpublic void registerCommit(String name) {    UserEntity entity = new UserEntity();    entity.setName(name);    entity.setMsg("新用戶注冊(cè)事務(wù)提交事件");    RegisterCommitEvent registerEvent = new RegisterCommitEvent(entity);    userDao.save(entity);    // 發(fā)送事件    applicationEventPublisher.publishEvent(registerEvent);}

3、添加事務(wù)事件監(jiān)聽(tīng)

@Async@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)public void handlerEventCmmit(RegisterCommitEvent event) {    try {        TimeUnit.SECONDS.sleep(5);    } catch (InterruptedException e) {        e.printStackTrace();    }    log.info("handlerEventCmmit: {}", event);}

4、測(cè)試

@RequestMapping("test")@ResponseBodypublic void test(String name) {    registerService.registerCommit(name);    log.info("執(zhí)行事務(wù)調(diào)用結(jié)束");}

控制臺(tái)輸出:

執(zhí)行事務(wù)調(diào)用結(jié)束handlerEventCmmit: RegisterCommitEvent[source=UserEntity(id=0, name=nik, msg=新用戶注冊(cè)事務(wù)提交事件)]

總結(jié)

Spring ApplicationEvent事件處理機(jī)制使用起來(lái)簡(jiǎn)單方便,可以對(duì)程序進(jìn)行有效解耦。

雖然可以發(fā)送任意類(lèi)型的對(duì)象,但是在實(shí)際業(yè)務(wù)中容易產(chǎn)生混亂,建議根據(jù)實(shí)際業(yè)務(wù),定義好各類(lèi)事件,并在監(jiān)聽(tīng)方法中實(shí)現(xiàn)異步處理。

關(guān)鍵詞:

相關(guān)文章

熱文推薦

當(dāng)前熱訊:Spring ApplicationEvent事件實(shí)現(xiàn)本地事件驅(qū)動(dòng)
當(dāng)前熱訊:Spring ApplicationEvent事件實(shí)現(xiàn)本地事件驅(qū)動(dòng)

TransactionalEventListener,事務(wù)事件監(jiān)聽(tīng),可監(jiān)聽(tīng)事......更多>

生態(tài)環(huán)境部:支持生態(tài)環(huán)保產(chǎn)業(yè)發(fā)展 積極培育綠色發(fā)展新動(dòng)能
生態(tài)環(huán)境部:支持生態(tài)環(huán)保產(chǎn)業(yè)發(fā)展 積極培育綠色發(fā)展新動(dòng)能

證券時(shí)報(bào)e公司訊,5月6日,生態(tài)環(huán)境部黨組書(shū)記孫金龍......更多>

【老外在中國(guó) 我眼中的新時(shí)代】巴鐵青年阿德:奮斗創(chuàng)造美好生活
【老外在中國(guó) 我眼中的新時(shí)代】巴鐵青年阿德:奮斗創(chuàng)造美好生活

來(lái)自巴基斯坦的“90后”青年阿德,在中國(guó)生活近十年,......更多>

短暫性腦缺血發(fā)作與腦梗死鑒別_腦缺血梗死灶是大病嗎-環(huán)球快看點(diǎn)
短暫性腦缺血發(fā)作與腦梗死鑒別_腦缺血梗死灶是大病嗎-環(huán)球快看點(diǎn)

1、缺血性腦梗死一般稱(chēng)為腔隙性腦梗死。如果沒(méi)有血管......更多>

排行推薦

魂王傳說(shuō)_關(guān)于魂王傳說(shuō)簡(jiǎn)述
魂王傳說(shuō)_關(guān)于魂王傳說(shuō)簡(jiǎn)述
小伙伴們,你們好,今天小夏來(lái)聊聊一篇關(guān)于魂王傳說(shuō),... 更多>
添可品牌創(chuàng)始人錢(qián)東奇:洗地機(jī)滲透率不足10% 技術(shù)仍是核心競(jìng)爭(zhēng)力
添可品牌創(chuàng)始人錢(qián)東奇:洗地機(jī)滲透率不足10% 技術(shù)仍是核心競(jìng)爭(zhēng)力
科沃斯集團(tuán)董事長(zhǎng)、添可品牌創(chuàng)始人錢(qián)東奇日前在某在論... 更多>
巴菲特持股公司一季報(bào)曝光:絕大部分標(biāo)的業(yè)績(jī)超預(yù)期,可口可樂(lè)提價(jià)帶動(dòng)業(yè)績(jī)上漲12%|環(huán)球今日?qǐng)?bào)
巴菲特持股公司一季報(bào)曝光:絕大部分標(biāo)的業(yè)績(jī)超預(yù)期,可口可樂(lè)提價(jià)帶動(dòng)業(yè)績(jī)上漲12%|環(huán)球今日?qǐng)?bào)
隨著美股進(jìn)入財(cái)報(bào)季,巴菲特的“優(yōu)等生”們也陸續(xù)發(fā)布... 更多>
2023年5月6日:時(shí)間是這些好公司的朋友,卻是那些爛公司的敵人---周投資總結(jié)_最新快訊
2023年5月6日:時(shí)間是這些好公司的朋友,卻是那些爛公司的敵人---周投資總結(jié)_最新快訊
本周滬深300指收盤(pán)于4016 88,本年滬深300指數(shù)上漲3... 更多>
蘇丹快速支援部隊(duì)領(lǐng)導(dǎo)人對(duì)沖突雙方談判表示歡迎 今日精選
當(dāng)?shù)貢r(shí)間5月6日,蘇丹快速支援部隊(duì)領(lǐng)導(dǎo)人達(dá)加洛發(fā)表聲... 更多>
F1邁阿密站周五練習(xí)賽分析 法拉利與紅牛的真實(shí)差距是多少?
通過(guò)對(duì)比法拉利與紅牛在FP2中的排位賽模擬,維斯塔潘... 更多>
頂固集創(chuàng):接受線上參與公司2022年度業(yè)績(jī)網(wǎng)上說(shuō)明會(huì)的投資者調(diào)研 當(dāng)前聚焦
頂固集創(chuàng)(SZ300749,收盤(pán)價(jià):8 13元)發(fā)布公告稱(chēng),2... 更多>
2023年房貸利率降了多少?多城房貸利率下至3時(shí)代!
1、商業(yè)貸款:首套房貸款利率普遍調(diào)至4%以下,最低可... 更多>
天天速遞!目標(biāo)不明,內(nèi)部混亂,如此大巴黎拿不下歐冠,能怪誰(shuí)?
這套方案引入的球員更多,且可以對(duì)中軸線進(jìn)行從中鋒,... 更多>
別拿陳舊的惡意軟件不當(dāng)威脅 世界快播報(bào)
盡管MyDoom已經(jīng)走過(guò)了近二十年的路,但是MyDoom的最新... 更多>
天天觀焦點(diǎn):上海票交所:前4月發(fā)生3次以上承兌人逾期的承兌人數(shù)量為1629家
上海票據(jù)交易所公告,2023年1月1日至4月30日,發(fā)生3次... 更多>
中國(guó)石化牽頭成立氫能產(chǎn)業(yè)鏈建設(shè)專(zhuān)家咨詢(xún)委員會(huì) 當(dāng)前關(guān)注
據(jù)中國(guó)石化(600028)官博消息,在5月5日舉行的氫能應(yīng)用... 更多>
科大訊飛全球首款認(rèn)知大模型AI學(xué)習(xí)機(jī)T20系列發(fā)布
據(jù)了解,科大訊飛(002230)AI學(xué)習(xí)機(jī)T20系列率先在語(yǔ)數(shù)... 更多>
天天速遞!浙江寧波:在風(fēng)險(xiǎn)可控前提下,放寬房貸年齡限制激活老年人購(gòu)房需求
浙江省寧波市地方金融監(jiān)督管理局等部門(mén)近日發(fā)布《關(guān)于... 更多>

云圖控股:原材料價(jià)格波動(dòng)對(duì)復(fù)合肥

天天關(guān)注:巴菲特的賣(mài)出理由(兼費(fèi)

再看2380_當(dāng)前短訊

全球球精選!如何在北交所大漲之中

和平精英電腦版下載_學(xué)堂威龍下載|

520送男朋友什么禮物合適_520男生能

播報(bào):張雪唐墨小說(shuō)_林三張雪小說(shuō)

貴州畢節(jié)七星關(guān)區(qū):“校農(nóng)結(jié)合”實(shí)

2023福建省纖維檢驗(yàn)中心招聘高層次

工業(yè)和信息化部批復(fù)5G地空通信試驗(yàn)