对于最新稳定版本,请使用Spring Framework 7.0.1spring-doc.cadn.net.cn

交易绑定事件

从Spring 4.2开始,事件的监听者可以绑定到事务的某个阶段。典型的例子是在事务成功完成后处理事件。这样做使事件在当前事务结果对监听者实际重要时,可以更灵活地使用事件。spring-doc.cadn.net.cn

您可以通过以下方式注册定期活动听众@EventListener注解。 如果你需要绑定到交易上,可以用@TransactionalEventListener. 这样做后,监听器默认绑定在事务的提交阶段。spring-doc.cadn.net.cn

下一个示例展示了这一概念。假设一个组件发布了一个顺序创建的事件,并且我们希望定义一个监听器,只有在该事件被发布的事务成功提交后才应处理该事件。以下示例设置了这样的事件监听器:spring-doc.cadn.net.cn

@Component
public class MyComponent {

	@TransactionalEventListener
	public void handleOrderCreatedEvent(CreationEvent<Order> creationEvent) {
		// ...
	}
}
@Component
class MyComponent {

	@TransactionalEventListener
	fun handleOrderCreatedEvent(creationEvent: CreationEvent<Order>) {
		// ...
	}
}

@TransactionalEventListener注释暴露了阶段属性允许你自定义监听者应绑定的交易阶段。有效的阶段为BEFORE_COMMIT,AFTER_COMMIT(默认),AFTER_ROLLBACK,以及AFTER_COMPLETION该系统汇总事务完成(无论是提交还是回滚)。spring-doc.cadn.net.cn

如果没有交易正在运行,监听器根本不会被调用,因为我们无法尊重所需的语义。不过,你可以通过设置后备执行注释的属性true.spring-doc.cadn.net.cn

@TransactionalEventListener仅适用于由 管理的线程绑定事务PlatformTransactionManager. 由ReactiveTransactionManager使用反应器上下文而非线程本地属性,因此从事件监听器的角度来看,没有兼容的活跃事务可以参与。spring-doc.cadn.net.cn