此篇文章以 Spring 4.2+ 爲例,在此版本以前略微有不一樣。 筆者自2014年起開始接觸和使用 Spring event,根據 Spring event 的原理開發了 JFinal-event: gitee.com/596392912/J… ,方便 JFinal 用戶使用,JFinal event 2.x 也同步成 Spring 4.2.x+ 的使用方式,再也不須要建立多個 Listener 類,使用更加簡單方便。vue
Spring 4.2+ 中再也不須要單獨編寫監聽器類,只須要在 Spring Bean 的方法上標記 @EventListener
註解便可。java
示例:多個監聽器,監聽 Account
建立,完成不一樣的業務邏輯。git
/** * 帳號監聽,處理帳號建立成功的後續邏輯 */
@Component
public class AccountListener {
/** * 1. 發送郵件、短信 */
@EventListener
public void processAccountCreatedEvent1(AccountCreatedEvent event) {
// TODO
}
/** * 2. 添加積分等,@Order(100) 用來設定執行順序 */
@EventListener
@Order(100)
public void processAccountCreatedEvent2(AccountCreatedEvent event) {
// TODO
}
/** * 3. 建立 lucene 索引等,@Async 用來標記爲異步線程池中執行 */
@EventListener
@Async
public void processAccountCreatedEvent3(AccountCreatedEvent event) {
// TODO
}
}
複製代碼
示例:mybatis中發送帳號建立事件。spring
注意:若是你是使用的 jpa,jpa 也有對應的事件機制,不須要像下面手動處理。數據庫
/** * 注入 ApplicationEventPublisher */
@Autowired
private ApplicationEventPublisher publisher;
@Override
public boolean save(Account account) {
// 僞代碼,數據庫保存成功
if (true) {
publisher.publishEvent(new AccountCreatedEvent(account));
}
return false;
}
複製代碼
@EventListener
註解屬性說明@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)
註解來標記事件的監聽執行順序,異步的狀況下只保證按順序將監聽器丟入進線程池,具體執行得看線程的心情 -.-mybatis
使用 @Async
標記便可,注意前提條件是:使用 @EnableAsync
開啓 Spring 異步。架構
本節以 mica 中的異步配置爲基礎講解。框架
配置項 | 默認值 | 說明 |
---|---|---|
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/pigSpringBlade
完整的線上解決方案(企業開發必備):gitee.com/smallc/Spri…IJPay
支付SDK讓支付觸手可及:gitee.com/javen205/IJ…掃描上面二維碼,更多精彩內容天天推薦!異步