Spring任务执行程序和调度程序

时间:2018-01-31 12:10:45

标签: java spring scheduled-tasks executorservice

我无法在文档或现有问题中找到必要的信息,这就是为什么我自己创建一个(我不能在类似的问题下提问)帖子还没有。)

我需要知道的是Spring任务执行器和调度程序之间的关系。 我目前的配置如下:

[['a','b'],['c','d']]

我不确定它是如何工作的。 "谁"确实运行我的任务?它是调度程序,因为任务是和他一起安排的吗?或者调度程序只创建它们,放入队列并且激励器运行它们?

如果没有,并且正在运行的是调度程序,我必须在特定类及其方法之上创建注释,以便它们可以由执行程序启动?

没有明确解释它们如何相关,在文档中,也不是" pool-size",但它至少可以在其他问题中找到。如果运行任务的调度程序是此配置中的执行程序冗余吗?

1 个答案:

答案 0 :(得分:3)

您的查询在文档中得到了很好的解决(参考this section了解完整的行为方面

回答您的具体问题

  

“谁”确实执行我的任务?它是调度程序,因为任务是和他一起安排的吗?或者调度程序只创建它们,放入队列并且激励器运行它们?

scheduler命名空间创建了一个ThreadPoolTaskScheduler实例,它能够自己处理任务执行(实现AsyncTaskExecutor )。因此,调度程序在没有执行程序帮助的情况下自行执行任务。

  

没有明确解释它们的相关性

调度程序和执行程序之间没有任何关系,除了它们都实现AsyncTaskExecutor意味着异步执行任务这一事实(在旁注 - executor命名空间创建一个实例ThreadPoolTaskExecutor

  

两者都不适用于“游泳池大小”

section将为您提供相关详细信息。

  

如果运行任务的调度程序是此配置中的执行程序冗余吗?

仅当您计划在应用程序中安排计划任务时才会进行冗余,否则它将用于标记为@Async的任何任务。

希望这可以回答您的问题,如果需要更多信息,请在评论中告知。