对于最新稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

配置任务调度器

在春季集成中,应用上下文作为消息总线,你只需考虑几种配置选项。 首先,你可能想控制中央任务调度器实例。 你可以通过提供一颗名为任务调度器. 这也被定义为常数,具体如下:spring-doc.cadn.net.cn

IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME

默认情况下,Spring 集成依赖于ThreadPoolTaskScheduler,如 Spring Framework 参考手册中任务执行与调度部分所述。 那个默认情况任务调度器自动启动时有十个线程,但请参见全局属性。 如果你提供自己的任务调度器实例中,你可以将“autoStartup”属性设置为false或者提供你自己的泳池规模值。spring-doc.cadn.net.cn

当轮询消费者在其配置中提供显式任务执行器引用时,处理程序方法的调用发生在该执行器的线程池内,而非主调度池。 然而,当端点的轮询器没有任务执行器时,该任务会被主调度器的某个线程调用。spring-doc.cadn.net.cn

不要在轮询线程上运行长时间运行的任务。 改用任务执行器吧。 如果你有很多轮询端点,可能会导致线程饥饿,除非你增加线程池大小。 此外,投票消费者有默认选项收到超时一秒钟。 由于轮询线程在此期间会被阻塞,我们建议当存在多个此类端点时使用任务执行器,以避免饥饿。 或者,你也可以减少收到超时.
如果端点的输入信道是基于队列的(即可轮询)信道之一,则称该端点为轮询消费者。 事件驱动消费者是指输入信道中设有调度者而非队列(换句话说,他们是可订阅的)。 此类端点没有轮询器配置,因为它们的处理程序是直接调用的。

在JEE容器里跑步时,可能需要用Spring的TimerManagerTaskScheduler,如此处所述,代替默认任务调度器. 为此,请为你的环境定义一个带有相应JNDI名称的豆子,如下示例所示:spring-doc.cadn.net.cn

<bean id="taskScheduler" class="org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler">
    <property name="jndiName" value="tm/MyTimerManager" />
    <property name="resourceRef" value="true" />
</bean>
当成为习俗时任务调度器在应用上下文中配置(如上所述)DefaultManagedTaskScheduler建议为其提供消息发布错误处理 (integrationMessagePublishingErrorHandlerBEAN)能够处理异常,作为ErrorMessage 会发送到错误通道,就像默认的“TaskScheduler” 一样BEAN 由 Framework 提供。