[英]Spring task executor and scheduler
无论是在文档中还是在这里已经存在的问题中,我都找不到必要的信息,这就是为什么我要自己创建一个人(我现在无法在类似的帖子下提问)。
我需要知道的是Spring任务执行程序和调度程序之间的关系。 我当前的配置如下所示:
<task:executor
id="executor"
pool-size="1-2"
queue-capacity="50"
rejection-policy="CALLER_RUNS"
/>
<task:scheduler id="scheduler" pool-size="2"/>
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="task1" method="methodInTask1" cron="0 1/5 * ? * *"/>
<task:scheduled ref="task2" method="methodInTask2" cron="0 0/5 * ? * *"/>
</task:scheduled-tasks>
我不确定它是如何工作的。 “谁”执行我的任务? 是调度程序,因为任务是和他一起调度的? 还是调度程序仅创建它们,将它们放入队列中,然后执行程序来运行它们?
如果不是,并且正在运行的是调度程序,那么我必须在特定的类及其方法之上创建注释,以便它们可以由执行者启动?
在文档中,没有明确说明它们之间的关系,也没有关于“池大小”的解释,但至少可以在其他问题中找到它。 如果由调度程序运行任务,那么在这种配置中执行程序是否多余?
您的查询在文档中得到了很好的解决( 有关完整的行为方面,请参阅本节 )
回答您的特定问题
“谁”执行我的任务? 是调度程序,因为任务是和他一起调度的? 还是调度程序仅创建它们,将它们放入队列中,然后执行程序来运行它们?
scheduler
名称空间创建ThreadPoolTaskScheduler
的实例,该实例能够处理任务本身( 因为它实现了AsyncTaskExecutor
)。 因此,调度程序无需执行者的帮助即可自行执行任务。
没有明确的解释它们之间的关系
调度程序和执行程序之间没有这种关系,除了它们都实现了旨在异步执行任务的AsyncTaskExecutor
( 请注意, 执行程序名称空间创建ThreadPoolTaskExecutor
的实例 )
都不是“池大小”的
本节将为您提供相关详细信息。
如果由调度程序运行任务,那么在这种配置中执行程序是否多余?
仅当您计划在应用程序中计划任务时才是冗余的,否则它将用于标记为@Async
任何任务。
希望这能回答您的问题,如果需要更多信息,请在评论中告知我们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.