我无法找到必要的信息,无论是在文档中还是在这里已经存在的问题中,这就是为什么我自己创建了一个(我还不能在类似的帖子下提问)。
我需要知道的是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,我必须在特定类及其方法上方创建注释,以便executor启动它们?
对于它们是如何相关的,没有明确的解释,在留档中,对于“池大小”也没有,但至少在其他问题中可以找到。如果运行任务的调度程序在这个配置中是多余的执行程序吗?
您的问题在文档中得到了很好的解决(有关完整的行为方面,请参阅本节)
回答你的具体问题
“谁”负责我的任务?是调度程序吗,就像他安排的任务一样?或者调度器只是在创建它们,将它们放入队列中,然后excutor运行它们?
调度程序
命名空间创建一个ThreadPoolTaskScheduler的实例,该实例能够处理任务执行本身(因为它实现了AsyncTaskExecitor
)。因此,调度程序在没有执行器帮助的情况下自己执行任务。
没有明确的解释它们是如何联系在一起的
调度器和执行器之间没有这样的关系,只是它们都实现了异步执行任务的AsyncTaskExecutor
(另一方面,执行器名称空间创建了ThreadPoolTaskExecutor
的一个实例)
两者都不适用于“池大小”
本节将为您提供相关详细信息。
如果运行任务的是调度程序,则此配置中的执行程序是否冗余?
仅当您计划在应用程序中使用计划任务时,它才是冗余的,否则它将用于标记为@Async
的任何任务。
希望这回答了你的疑问,如果需要更多信息,请在评论中告知。
在上下文中没有Executor bean的情况下,Spring Boot会自动配置一个具有合理默认值的ThreadPoolTaskExecutor,这些默认值可以自动与异步任务执行(@EnableAsync)和Spring MVC异步请求处理相关联。 如果您在上下文中定义了自定义Executor,则常规任务执行(即@EnableAsync)将透明地使用它,但不会配置Spring MVC支持,因为它
每隔一段时间需要调度任务执行,也许你想注册一个任务在客户端完成连接5分钟后执行,一个常见的用例是发送一个消息“你还活着?”到远端通,如果远端没有反应,则可以关闭通道(连接)和释放资源。 本节介绍使用强大的 EventLoop 实现任务调度,还会简单介绍 Java API的任务调度,以方便和 Netty 比较加深理解。 使用普通的 Java API 调度任务 在 Java 中使用 JDK 提供的 S
我使用spring调度器任务在固定间隔后调用类中的方法,如下所示 一旦调度程序触发init方法。init方法将使用线程池执行器来执行队列中的所有作业。 问题:执行init方法的初始线程是否会等待init方法中的所有处理(由executor service通过生成新线程来完成)完成? 调度器任务的池大小属性仅用于触发任务,而不是用于执行或处理被触发任务内部的逻辑。
我需要帮助设计基于多线程的应用程序,包括动态url创建和线程处理。 我在我的应用程序中使用了一个Spring调度器,它每30秒调度一次。从这个调度方法中,我调用了一些基于服务的api,它在循环中,而且我需要每个API有一个线程池执行器,上面有一个线程处理。 由于这个过程是从计划方法开始的,所以每次创建新的线程池时,这就是问题所在。你可以在代码中看到。 我想要的是,如果对于任何一个应用编程接口,如果
问题3:如果我使用@Schedured(initaildelay=10000,fixedrate=20000)而不是@PostConstruct注释,它将解决第一个问题,但是它将每20秒执行一次我的作业。 有线索吗?