Spring @Async注释未执行的方法

时间:2016-09-29 15:21:53

标签: java spring spring-boot

我使用spring @Async注释来执行某些任务。在某些时候(可能是因为达到了池大小)我在调试器中看到调用@Async的方法但是没有达到方法中的断点。我不知道它会在另一个@Async方法完成时被调用,或者它会永远被跳过。

我想知道在没有免费的@Async执行时是否可以触发异常。

此外,我怎么知道在任何给定时间当前使用了多少@Async

由于 阿维

1 个答案:

答案 0 :(得分:1)

  

在某些时候(可能是因为达到了池大小)我在调试器中看到调用@Async的方法但是没有达到方法中的断点。

你是否确定代码片段如果没有被某些条件阻止?如果没有有效的代码示例,那么此时只能进行推测。

  

我想知道在没有免费的@Async执行时是否可以触发异常。

在这种情况下通常会抛出TimeoutException。您可以通过将以下内容添加到Spring配置XML来修改超时值。

<mvc:annotation-driven>
  <mvc:async-support default-timeout="180"/>
</mvc:annotation-driven>

或者看一下这个答案:Providing a timeout value when using @Async for a method using Spring 3.0

  

此外,我怎么知道在任何给定时间当前使用了多少@Async

通常使用例如激活日志记录时在@Async方法内执行的代码中的sl4j,您将看到以下输出:

2017-03-10 10:27:41,910 [SimpleAsyncTaskExecutor-1] DEBUG
2017-03-10 10:27:43,282 [SimpleAsyncTaskExecutor-2] DEBUG

希望这有帮助!