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

混合Spring集成和Spring调度器

巩子实
2023-03-14

我们正在混合Spring集成和Spring引导的调度功能,使用:

@SpringBootApplication
@EnableIntegration
@IntegrationComponentScan
@EnableConfigurationProperties
@EnableScheduling
public class MyApplication {
...
}

@EnableScheduling创建一个名为“taskScheduler”的bean,然后由spring集成使用:

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集成的默认 poolSize 是 10(当我们遇到饥饿时需要这个值),而 spring-boot 的默认值是 1(我们还需要避免在计划进程中并发)。

问题:

  • 对于 spring-integration 来说,共享他的任务调度程序 Bean 与 spring-boot 调度功能是正常行为吗?
  • 有没有办法为 Spring 集成指定一个唯一的任务调度程序,无论是否启用了引导中的调度?

感谢您的回答

共有1个答案

呼延河
2023-03-14

行为和逻辑是正确的。从 Spring 启动的角度来看,配置约定的期望也是正确的。只是你错过的@EnableScheduling不是 Spring Boot 功能,而是 Spring Framework 原生的:https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling。Spring Boot 只是给了我们额外的配置自由度,在这个问题上有一些豆子。因此,我们只需要依靠其自动配置。

如果自动配置不符合您的要求,您可以随时提供自己的配置并在必要时进行覆盖。

看看 Spring Boot 中的@EnableScheduling它的@Scheduled钩子和适当的 TaskSchedulingAutoConfiguration,要同时覆盖任何你想让 Spring 集成快乐的东西并不容易。因此,我们应该采取相反的方向,真正覆盖Spring Integrationendpoint的调度程序。使用轮询的每个地方,您还需要配置自定义调度程序,而不是自动配置的调度程序

 类似资料:
  • 在我的用例中,最简单的集成组件安排是什么: 接收来自多个来源和多种格式的消息(所有消息都是JSON序列化对象)。 将消息存储在缓冲区中最多10秒(聚合) 通过不同的类属性getter(例如class1.someId(),class2.otherId(),...) 释放所有分组的消息并转换为新的聚合消息。 到目前为止(第1点和第2点),我正在使用聚合器,但不知道3)处的问题是否有现成的解决方案或者我

  • 如果其他人已经解决了这个问题,那就只是寻找一些信息。我想同时使用Spring集成和Spring批处理。这两个都是SpringBoot应用程序,理想情况下,我希望将它们和各自的配置分开,这样它们都是自己的可执行jar。我在自己的进程空间中执行它们时遇到问题,我相信我希望,除非有人能说服我,否则,每个程序都能像自己的Spring Boot应用程序一样运行,并用自己的配置文件和属性初始化自己。不过,我遇

  • 我想使用聚合器从两条消息中创建一条消息,但我不知道如何做到这一点。 目前,我正在从一个目录中读取两个文件,并希望将这些消息聚合为一个。 我的整个项目是这样的: 读入。拉链- 如果我可以在解压缩文件后发送一条包含两个有效负载的消息,那就太好了,但在读取后聚合就足够了。 我的拉链看起来像这样: 它将这些文件放入两个目录中,我使用FileReadingMessageSource再次从中读取它们。我还想只

  • 当从服务器上检索文件并根据条件将文件路由到mvChannel和toGet通道时,我有许多在从服务器上检索文件的过程场景,我定义了一个路由器处理场景,并路由到作业通道和运行spring Batch ,我的问题是这是正确的体系结构吗?

  • 问题内容: 我想使用Spring Batch和Spring Integration从数据库导入数据,并将它们写入文件,然后通过ftp将其传输到远程服务器。 但是我想我的问题是我不想为我的表创建域对象。我的查询是随机的,我想要一些可以读取数据并将其写入文件并进行传输的东西。 是否可以在不创建各自的域对象的情况下使用Spring Batch和Integration? 问题答案: 绝对。您可以将JDBC

  • 目前,我正在与spring integration合作开发新的应用程序,并启动了poc,以了解如何处理故障案例。在我的应用程序中,spring integration将接收来自IBM mq的消息,并根据消息类型验证头信息和到不同队列的路由。传入的消息可能是批量消息,所以我使用了spring integration的拆分器和聚合器,并且对技术工作流程有很好的进展和控制。目前我面临的问题很少,我们有I

  • 我正在使用一个Spring Boot+Spring Security OAuth2应用程序,我相信它的灵感来自Dave Syer的示例。应用程序被配置为OAuth2授权服务器,具有使用资源所有者密码凭据流的单个公共客户端。成功的令牌被配置为JWT。 公共Angular客户机向/oauth/token发送一个POST请求,该请求带有包含客户机id和秘密的基本身份验证头(这是让客户机进行身份验证的最简

  • Spring是一个流行的Web框架,它提供易于集成与很多常见的网络任务。所以,问题是,为什么我们需要Spring,当我们有Struts2?Spring是超过一个MVC框架 - 它提供了许多其它好用的东西,这是不是在Struts。例如:依赖注入可以是有用的任何框架。在本章中,我们将通过一个简单的例子来看看如何集成Spring和Struts2一起。 首先,需要添加下列文件到项目的构建路径从Spring