如何知道哪个EventListener将在Spring中首先执行

时间:2018-01-16 19:32:59

标签: java spring event-listener

我继承了一些使用多个Spring EventListener来处理特定事件的代码。我注意到在不同的环境中,EventListener在发布事件时以不同的顺序执行。

例如,假设我有2个EventListeners:

@EventListener
@Async
public void doSomethingForEvent(SomeEvent event)

@EventListener
@Async
public void doAnotherThingForEvent(SomeEvent event)

在一个环境中,doSomethingForEventdoAnotherThingForEvent之前执行,而在另一个环境中,反之亦然。

所以我的问题是,有没有办法知道他们将执行什么顺序?它是一个随机顺序,因为@Async注释,还是有办法指定顺序?

2 个答案:

答案 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

的javadoc
  

还可以定义调用某个事件的侦听器的顺序。为此,请在此事件侦听器注释旁边添加Spring的常用@Order注释。