当前位置: 首页 > 知识库问答 >
问题:

Spring的任务调度器

丘学海
2023-03-14

我使用spring调度器任务在固定间隔后调用类中的方法,如下所示

<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="processScheduledJobs" method="init" fixed-delay=5000/>

一旦调度程序触发init方法。init方法将使用线程池执行器来执行队列中的所有作业。

<bean id="processScheduledJobs" class="XXXX.VV.ProcessScheduledJobs">
 <property name="pool" ref="jobExecutorService"" />
</bean>

<bean id="scheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <property name="threadFactory">
      <bean class="XXX..VVV.NamingThreadFactory">
           <constructor-arg value="thread" />
      </bean>
  </property>
  <property name="corePoolSize" value="16" />
  <property name="maxPoolSize" value="64" />
  <property name="keepAliveSeconds" value="4" />
  <property name="queueCapacity" value="512" />
</bean>

问题:执行init方法的初始线程是否会等待init方法中的所有处理(由executor service通过生成新线程来完成)完成?

调度器任务的池大小属性仅用于触发任务,而不是用于执行或处理被触发任务内部的逻辑。

共有1个答案

丌官晔
2023-03-14

属于调度程序的线程将把所有作业提交给jobExecutorService。其中多达64个作业将立即开始执行,其余的,多达512个作业将排队。一旦所有作业都被提交——而不是执行——init方法将退出。这不会超过几毫秒。

如果调度器jobExecutorService不一样——我说不出这一点,因为您的部分xml丢失了——它的线程将不会用于执行作业逻辑。

 类似资料:
  • 简介 在过去,开发者必须在服务器上为每个任务生成单独的 Cron 项目。而令人头疼的是任务调度不受源代码控制,而且必须通过 SSH 连接到服务器上来增加 Cron 项目。 Laravel 的命令调度程序允许你在 Laravel 中对命令调度进行清晰流畅的定义。并且在使用调度程序时,只需要在服务器上增加一条 Cron 项目即可。调度是在 app/Console/Kernel.php 文件的 sche

  • 基本任务调度 方案1: 通过 @Cron 注解,这个需要依赖 cron4j 框架: //1分钟执行一次 @Cron("*/1 * * * *") public class MyTask implements Runnable { @Override public void run() { System.out.println("task running...");

  • 项目中有一个要求,该要求将具有将完成某些工作的计划任务。 该项目是基于Spring的,计划的作业将是应用程序大战的一部分。我以前从未实现过这种功能。 我听说过Quartz。此外,我在某处读到Spring提供了一些功能来安排任务。所以,我在想如果我已经在使用Spring,那么为什么要使用其他API(Quartz)。 我不确定使用哪一个?一个比另一个的优缺点是什么? 请提出满足我要求的最佳方式。

  • 我无法找到必要的信息,无论是在文档中还是在这里已经存在的问题中,这就是为什么我自己创建了一个(我还不能在类似的帖子下提问)。 我需要知道的是Spring任务执行器和调度器之间的关系。我当前的配置如下所示: 我不确定的是它是如何工作的。“谁”运行我的任务?是调度器,因为任务是和他一起安排的吗?或者调度器只是创建它们,放在队列中,由执行者运行它们? 如果没有,运行的是scheduler,我必须在特定类

  • 有一个基于某些条件删除文件的任务。这个任务应该每天在某个时间运行。我们是否应该为这个任务使用spring boot和调度器。或者spring批处理+调度器会很好。也可以在spring批处理中使用分区并行处理此任务。 谢谢

  • 问题内容: 是否可以在确切指定的时间仅安排一次Spring服务方法?例如,当前时间是下午2点,但是当我按下操作按钮时,我希望我的服务方法从晚上8点开始。我熟悉@Scheduled批注,并且不确定如何编写cron表达式以使其不定期运行。这一次,每天晚上8点触发。 有什么建议么? 问题答案: 你可以使用Spring的TaskScheduler的实现之一。我在下面提供了一个示例,该示例不需要太多的配置(