事务绑定事件
从 Infra 4.0 开始,事件的监听器可以绑定到事务的某个阶段。典型的例子是在事务成功完成后处理事件。这使得当当前事务的结果对监听器实际上很重要时,可以更灵活地使用事件。
您可以使用 @EventListener 注解注册常规事件监听器。如果您需要将其绑定到事务,请使用 @TransactionalEventListener。当您这样做时,默认情况下,监听器绑定到事务的提交阶段。
下一个示例展示了这个概念。假设一个组件发布了一个订单创建事件,我们要定义一个监听器,该监听器应仅在发布该事件的事务成功提交后才处理该事件。以下示例设置了这样一个事件监听器:
-
Java
@Component
public class MyComponent {
@TransactionalEventListener
public void handleOrderCreatedEvent(CreationEvent<Order> creationEvent) {
// ...
}
}
@TransactionalEventListener 注解公开了一个 phase 属性,允许您自定义监听器应绑定到的事务阶段。有效阶段为 BEFORE_COMMIT、AFTER_COMMIT(默认值)、AFTER_ROLLBACK 以及 AFTER_COMPLETION,后者聚合了事务完成(无论是提交还是回滚)。
如果没有事务正在运行,则根本不会调用监听器,因为我们无法遵守所需的语义。但是,您可以通过将注解的 fallbackExecution 属性设置为 true 来覆盖该行为。
|
从 5.0 开始, |