我继承了一些使用多个Spring EventListener来处理特定事件的代码。我注意到在不同的环境中,EventListener在发布事件时以不同的顺序执行。
例如,假设我有2个EventListeners:
@EventListener
@Async
public void doSomethingForEvent(SomeEvent event)
和
@EventListener
@Async
public void doAnotherThingForEvent(SomeEvent event)
在一个环境中,doSomethingForEvent
在doAnotherThingForEvent
之前执行,而在另一个环境中,反之亦然。
所以我的问题是,有没有办法知道他们将执行什么顺序?它是一个随机顺序,因为@Async
注释,还是有办法指定顺序?
答案 0 :(得分:4)
也可以定义听众的顺序 要调用某些事件。为此,添加Spring的常见@Order 注释与此事件侦听器注释一起。
根据EventListener
文档,您可以使用@Order
注释并提供不同的值来定义顺序(较低的数字具有较高的优先级)
@EventListener
@Order(0)
@Async
public void doSomethingForEvent(SomeEvent event)
和
@EventListener
@Order(1)
@Async
public void doAnotherThingForEvent(SomeEvent event)
在上述情况下,doSomethingForEvent
将首先执行,然后执行doAnotherThingForEvent
侦听器。
答案 1 :(得分:1)
检查@EventListener
还可以定义调用某个事件的侦听器的顺序。为此,请在此事件侦听器注释旁边添加Spring的常用@Order注释。