事務繫結的事件
從 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 版本開始, |