Spring 事务事件

举报
yd_287908631 发表于 2026/10/18 16:26:36 2026/10/18
【摘要】 1. Spring 事务事件::: important 使用场景事务成功后发送通知事务成功后更新缓存事务回滚后的补偿操作:::需要开启异步配置,任何一个配置类或者启动类添加注解@EnableAsync::: tabs@tab 定义事件@Slf4j@Componentpublic class ReportGenerationEvent extends ApplicationEvent { ...

1. Spring 事务事件

::: important 使用场景

  1. 事务成功后发送通知
  2. 事务成功后更新缓存
  3. 事务回滚后的补偿操作
    :::

需要开启异步配置,任何一个配置类或者启动类添加注解@EnableAsync
::: tabs

@tab 定义事件

@Slf4j
@Component
public class ReportGenerationEvent extends ApplicationEvent {
    
    private final Long recordId;
    
    public ReportGenerationEvent(Object source, Long recordId) {
        super(source);
        this.recordId = recordId;
    }
    
    public Long getRecordId() {
        return recordId;
    }
}

@tab 发布事件

@Resource
private ApplicationEventPublisher eventPublisher;

// 含有事务的方法中使用
eventPublisher.publishEvent(new ReportGenerationEvent(this, recordId));

@tab 创建事件监听器


@Component
public class ReportEventListener {
    
    @Resource
    private ReportService reportService;
    
    // 使用你定义的线程池进行异步处理,核心!确保在事务成功提交后才执行
    @Async("threadPoolTaskExecutor")
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void handleReportGenerationEvent(ReportGenerationEvent event) {
        try {
            reportService.generatePreDiagnosisReport(event.getRecordId());
        } catch (Exception e) {
            log.error("出现异常: {}", e.getMessage(), e);
        }
    }
}

::: tabs

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。