【问题标题】:How does Spring @Async choose a task executor/scheduler if multiple ones are defined?如果定义了多个任务执行器/调度器,Spring @Async 如何选择任务执行器/调度器?
【发布时间】:2017-05-25 19:26:27
【问题描述】:

我在 XML 配置中定义了以下内容:

<task:scheduler id="myScheduler" pool-size="10" />
<bean id="asyncExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
<bean id="asyncExecutor2" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>

在 Spring 中使用@Async 注解时,它如何知道使用这些执行器/调度器中的哪一个?我希望它会在启动时引发错误,因为这里有多个并且我没有包含&lt;task:annotation-driven executor="xxx"/&gt; 标签,但它似乎工作正常。有没有一种方法可以记录正在使用的某个地方?

【问题讨论】:

  • 是的,您可以在@Async 方法中登录以检测线程名称
  • 当我登录Thread.currentThread().getName()时,它只显示SimpleAsyncTaskExecutor-1,每次调用数字增加一。

标签: spring spring-async


【解决方案1】:

...

<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="10" />

...

你可能会在调试时查看堆栈跟踪中的线程名称,它应该以类似以下内容开头:[asyncExecutor-xx]

【讨论】:

  • 当我登录Thread.currentThread().getName() 时,它只显示SimpleAsyncTaskExecutor-1,每次调用数字都会增加一。另外,我这样声明我的任务执行者是不是错了:&lt;bean id="asyncExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/&gt; 而不是使用&lt;task:executor/&gt;?这两个声明有何不同?
  • 应该没有错, 是一个帮助配置 beans 的命名空间,你可以使用 来完成同样的工作,只是它需要更明确配置。
猜你喜欢
  • 2014-12-13
  • 1970-01-01
  • 2016-08-23
  • 2013-11-27
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多