事务绑定事件
从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
来覆盖此行为。
从6.1开始, |