|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
事务绑定的事件
从 Spring 4.2 开始,事件的监听器可以绑定到事务的某个阶段。 典型的例子是在事务成功完成后处理事件。 这样,当当前事务的结果对监听器确实重要时,事件的使用将更加灵活。
你可以使用 @EventListener 注解注册一个普通的事件监听器。
如果你需要将其绑定到事务上,请使用 @TransactionalEventListener。
这样做时,默认情况下该监听器会绑定到事务的提交阶段。
下一个示例展示了这一概念。假设某个组件发布了一个“订单已创建”事件,而我们希望定义一个监听器,该监听器仅在发布该事件的事务成功提交后才处理此事件。以下示例设置了这样一个事件监听器:
-
Java
-
Kotlin
@Component
public class MyComponent {
@TransactionalEventListener
public void handleOrderCreatedEvent(CreationEvent<Order> creationEvent) {
// ...
}
}
@Component
class MyComponent {
@TransactionalEventListener
fun handleOrderCreatedEvent(creationEvent: CreationEvent<Order>) {
// ...
}
}
@TransactionalEventListener 注解提供了一个 phase 属性,允许你自定义监听器应绑定到的事务阶段。
有效的阶段包括 BEFORE_COMMIT、AFTER_COMMIT(默认值)、AFTER_ROLLBACK,
以及 AFTER_COMPLETION,后者表示事务完成(无论是提交还是回滚)的聚合阶段。
如果没有正在运行的事务,则根本不会调用该监听器,因为我们无法保证所需的语义。不过,您可以通过将注解的 fallbackExecution 属性设置为 true 来覆盖此行为。
|
|