我使用spring @Async注释来执行某些任务。在某些时候(可能是因为达到了池大小)我在调试器中看到调用@Async的方法但是没有达到方法中的断点。我不知道它会在另一个@Async方法完成时被调用,或者它会永远被跳过。
我想知道在没有免费的@Async执行时是否可以触发异常。
此外,我怎么知道在任何给定时间当前使用了多少@Async
由于 阿维
答案 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
希望这有帮助!