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;