spring-boot - 混合 spring-integration 和 spring 调度器
问题描述
我们正在混合使用spring-integration和spring-boot 的调度功能:
@SpringBootApplication
@EnableIntegration
@IntegrationComponentScan
@EnableConfigurationProperties
@EnableScheduling
public class MyApplication {
...
}
@EnableScheduling
创建一个名为“taskScheduler”的bean,然后由spring-integration使用:
public abstract class IntegrationContextUtils {
public static final String TASK_SCHEDULER_BEAN_NAME = "taskScheduler";
...
}
private void registerTaskScheduler() {
if (!this.beanFactory.containsBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME)) {
...
this.registry.registerBeanDefinition(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME, scheduler);
}
}
问题是,spring-integration 的默认 poolSize 是 10(当我们遇到饥饿时需要这个值),而 spring-boot 的默认值是 1(我们还需要避免在我们的计划进程中出现并发)。
问题:
- 这是 spring-integration 与 spring-boot 调度功能共享他的任务调度程序 bean 的正常行为吗?
- 有没有办法为spring-integration指定一个唯一的任务调度程序,无论是否启用了启动调度?
感谢您的回答
解决方案
行为和逻辑是正确的。从 Spring Boot 的角度来看,convention-on-configuration 的期望也是正确的。只有您错过@EnableScheduling
的不是 Spring Boot 功能,而是 Spring Framework 原生:https ://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling 。Spring Boot jsut 给了我们额外的自由配置一些 bean 的事情。所以,我们只需要依赖它的自动配置。
如果自动配置不符合您的要求,您始终可以提供自己的配置并在必要时覆盖。
在 Spring Boot 中查看@EnableScheduling
,它的@Scheduled
钩子和适当TaskSchedulingAutoConfiguration
的,要同时覆盖任何你想让 Spring Integration 快乐的东西并不是那么容易。所以,我们应该采取相反的方向,真正覆盖Scheduler
Spring 集成端点的 a 。您使用的每个地方poller
,您还需要配置自定义Scheduler
而不是自动配置。
推荐阅读
- sql - 基于另一列的不同值的 SUM 值
- firefox - 如何让 Firefox 地址栏偏爱书签?
- java - Spring boot 找不到 org.springframework:springloaded:jar:2.1.6.RELEASE
- flutter - 如何构建应用程序状态,以便在状态更改时更新所有依赖的小部件?
- javascript - 处理后如何异步处理,删除元素
- html - Base64 图像编码 - 如果编码的图像在 src 字符串中,为什么它会调用服务器
- sql - 从未订购过某种产品的客户的 SQL 统计信息
- javascript - 框的“0”宽度呈现为“1”宽度
- vba - vba 代码在 UPDATE 语句中生成语法错误
- r - 发布 rmd 格式