Class NotificationEventListener
java.lang.Object
io.leandev.appfuse.notification.NotificationEventListener
NotificationEvent → NotificationService 的交易後接縫
以 @TransactionalEventListener(AFTER_COMMIT) 確保通知只在發布它的業務交易提交後才處理
(為 rollback 的操作不誤送);fallbackExecution = true 讓無交易情境(如純讀取後發通知)亦能執行。
本監聽同步執行(刻意不加 @Async):它只做輕量的「解析收件人 → 渲染 → 寫入 Outbox」,且需在
仍持有 TenantContext 的執行緒進行(收件人解析常需租戶查詢)。
慢速 / 易失敗的實際遞送才非同步——由 NotificationService 寫入 Outbox 後交
NotificationOutboxDispatcher 非同步處理。
- Since:
- 4.0.0
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
NotificationEventListener
- Parameters:
notificationService- 通知服務
-
-
Method Details
-
onNotification
@TransactionalEventListener(phase=AFTER_COMMIT, fallbackExecution=true) @Transactional(propagation=REQUIRES_NEW) public void onNotification(NotificationEvent event) 交易提交後處理通知事件- Parameters:
event- 通知事件AFTER_COMMIT在發布交易提交後執行;此階段沿用該(已完成)交易的寫入會 flush 卻不再 commit 而遺失。故以@Transactional(REQUIRES_NEW)另開新交易確保 Outbox 列落地、提交(從@Transactional業務方法發通知為主路徑,缺此則靜默不入庫)。無交易情境亦正確。
-