spring 事务提交成功后,再去发送事件

在Spring中,当事务成功提交后,通过`applicationContext.publishEvent(event)`发送事件时,事件处理方法`@EventListener`内将无法找到正在进行的事务。为确保在事件监听器中能进行新的事务操作(如保存数据),需要在监听器方法上添加`@Transactional(propagation=Propagation.REQUIRES_NEW)`。若需手动开启事务,可利用`PlatformTransactionManager`接口。
摘要由CSDN通过智能技术生成
TransactionSynchronizationManager.registerSynchronization( new TransactionSynchronizationAdapter() {
      @Override
      public void afterCommit()
      {
        applicationContext.publishEvent( event );// 发送事件
      }
    } );

PS:

spring 在发送事务(applicationContext.publishEvent( event );)和@EventListener本来是拥有一个事务,

但是, 我们在保证事务执行成功之后再去接受事务,导致没有in progress的事务。所以如果需要在@EventListener端再去提交事务(保存数据),需要在方法上加上@Transactional(propagation=Propagation.REQUIRES_NEW)。

如果需要手动开启事务,可以使用Spring的PlatformTransactionManager 接口,

@Autowired
private PlatformTransactionManager transactionManager;

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值