Class NotificationEventListener

java.lang.Object
io.leandev.appfuse.notification.NotificationEventListener

public class NotificationEventListener extends Object

NotificationEventNotificationService 的交易後接縫

@TransactionalEventListener(AFTER_COMMIT) 確保通知只在發布它的業務交易提交後才處理 (為 rollback 的操作不誤送);fallbackExecution = true 讓無交易情境(如純讀取後發通知)亦能執行。

本監聽同步執行(刻意不加 @Async):它只做輕量的「解析收件人 → 渲染 → 寫入 Outbox」,且需在 仍持有 TenantContext 的執行緒進行(收件人解析常需租戶查詢)。 慢速 / 易失敗的實際遞送才非同步——由 NotificationService 寫入 Outbox 後交 NotificationOutboxDispatcher 非同步處理。

Since:
4.0.0
  • Constructor Details

    • NotificationEventListener

      public NotificationEventListener(NotificationService notificationService)
      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 業務方法發通知為主路徑,缺此則靜默不入庫)。無交易情境亦正確。