javascript
Spring event 使用完全指南
說(shuō)明
此篇文章以 Spring 4.2+ 為例,在此版本之前略微有不同。 筆者自2014年起開(kāi)始接觸和使用 Spring event,根據(jù) Spring event 的原理開(kāi)發(fā)了 JFinal-event: gitee.com/596392912/J… ,方便 JFinal 用戶(hù)使用,JFinal event 2.x 也同步成 Spring 4.2.x+ 的使用方式,不再需要?jiǎng)?chuàng)建多個(gè) Listener 類(lèi),使用更加簡(jiǎn)單方便。
使用
創(chuàng)建 Event 事件監(jiān)聽(tīng)
Spring 4.2+ 中不再需要單獨(dú)編寫(xiě)監(jiān)聽(tīng)器類(lèi),只需要在 Spring Bean 的方法上標(biāo)記 @EventListener 注解即可。
示例:多個(gè)監(jiān)聽(tīng)器,監(jiān)聽(tīng) Account 創(chuàng)建,完成不同的業(yè)務(wù)邏輯。
/*** 賬號(hào)監(jiān)聽(tīng),處理賬號(hào)創(chuàng)建成功的后續(xù)邏輯*/ public class AccountListener {/*** 1. 發(fā)送郵件、短信*/public void processAccountCreatedEvent1(AccountCreatedEvent event) {// TODO}/*** 2. 添加積分等,@Order(100) 用來(lái)設(shè)定執(zhí)行順序*/(100)public void processAccountCreatedEvent2(AccountCreatedEvent event) {// TODO}/*** 3. 創(chuàng)建 lucene 索引等,@Async 用來(lái)標(biāo)記為異步線程池中執(zhí)行*/public void processAccountCreatedEvent3(AccountCreatedEvent event) {// TODO} } 復(fù)制代碼發(fā)送 Event 事件
示例:mybatis中發(fā)送賬號(hào)創(chuàng)建事件。
注意:如果你是使用的 jpa,jpa 也有對(duì)應(yīng)的事件機(jī)制,不需要像下面手動(dòng)處理。
/*** 注入 ApplicationEventPublisher*/ private ApplicationEventPublisher publisher; public boolean save(Account account) {// 偽代碼,數(shù)據(jù)庫(kù)保存成功if (true) {publisher.publishEvent(new AccountCreatedEvent(account));}return false; } 復(fù)制代碼idea 中的快捷跳轉(zhuǎn)按鈕
@EventListener 注解屬性說(shuō)明
(value = {AccountCreatedEvent.class, AccountUpdatedEvent.class}, condition = "#event.account.age > 10") public void processAccountCreatedEvent2(AccountEvent event) {// TODO } 復(fù)制代碼- value 和 classes 作用相同,表示監(jiān)聽(tīng)的一個(gè)或一組事件,用于支持方法中同一個(gè)父類(lèi)的事件,例如 AccountEvent;
- condition 表達(dá)式,支持 Spring el,用來(lái)做 event 中的變量或者方法判斷。
監(jiān)聽(tīng)執(zhí)行順序
可以使用 @Order(100) 注解來(lái)標(biāo)記事件的監(jiān)聽(tīng)執(zhí)行順序,異步的情況下只保證按順序?qū)⒈O(jiān)聽(tīng)器丟入進(jìn)線程池,具體執(zhí)行得看線程的心情 -.-
監(jiān)聽(tīng)異步執(zhí)行
使用 @Async 標(biāo)記即可,注意前提條件是:使用 @EnableAsync 開(kāi)啟 Spring 異步。
Spring boot 配置異步
本節(jié)以 mica 中的異步配置為基礎(chǔ)講解。
異步配置
- @EnableAsync 開(kāi)啟異步。
- @EnableScheduling?開(kāi)啟定時(shí)任務(wù)。
- MicaAsyncProperties 為異步線程池的配置。
異步配置項(xiàng)
| mica.async.core-pool-size | 2 | 異步核心線程數(shù),默認(rèn):2 |
| mica.async.keep-alive-seconds | 300 | 線程存活時(shí)間,默認(rèn):300 |
| mica.async.max-pool-size | 50 | 異步最大線程數(shù),默認(rèn):50 |
| mica.async.queue-capacity | 10000 | 隊(duì)列容量,默認(rèn):10000 |
開(kāi)源推薦
- mica?Spring boot 微服務(wù)核心組件集:gitee.com/596392912/m…
- Avue?一款基于vue可配置化的神奇框架:gitee.com/smallweigit…
- pig?宇宙最強(qiáng)微服務(wù)(架構(gòu)師必備):gitee.com/log4j/pig
- SpringBlade?完整的線上解決方案(企業(yè)開(kāi)發(fā)必備):gitee.com/smallc/Spri…
- IJPay?支付SDK讓支付觸手可及:gitee.com/javen205/IJ…
關(guān)注我們
掃描上面二維碼,更多精彩內(nèi)容每天推薦!
轉(zhuǎn)載于:https://juejin.im/post/5cac613ae51d456e7349dbca
總結(jié)
以上是生活随笔為你收集整理的Spring event 使用完全指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里云城市数据大脑开发规范
- 下一篇: Tensorflow入门——训练结果的保