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