Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 混合spring集成和spring调度程序_Spring Boot_Spring Integration - Fatal编程技术网

Spring boot 混合spring集成和spring调度程序

Spring boot 混合spring集成和spring调度程序,spring-boot,spring-integration,Spring Boot,Spring Integration,我们正在混合使用spring集成和spring boot的调度功能: @SpringBootApplication @EnableIntegration @IntegrationComponentScan @EnableConfigurationProperties @EnableScheduling public class MyApplication { ... } @EnableScheduling创建一个名为“taskScheduler”的bean,然后由spring integrat

我们正在混合使用spring集成和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";
  ...
}
问题是,spring集成的缺省poolSize为10(当我们遇到饥饿时需要该值),而spring引导的缺省poolSize为1(我们还需要避免调度进程中的并发)

问题

  • SpringIntegration将其任务调度器bean与SpringBoot调度功能共享是正常行为吗
  • 是否有一种方法可以为spring集成指定一个唯一的任务调度器,无论是否启用启动中的调度

谢谢你的回答,你的观点和逻辑是正确的。从Spring Boot的角度来看,来自配置约定的期望也是正确的。只有
@EnableScheduling
不是Spring启动功能,而是Spring框架本机:。SpringBootJSUT为我们提供了额外的配置自由,在这个问题上有一些bean。所以,我们只需要依靠它的自动配置

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


查看Spring Boot中的
@EnableScheduling
、它的
@Scheduled
钩子和适当的
TaskSchedulingAutoConfiguration
,要同时覆盖您想要使Spring集成愉快的任何内容都不是那么容易。因此,我们应该朝相反的方向走,真正覆盖Spring集成端点的
调度程序。在使用
轮询器的每个地方,您还需要配置一个自定义
调度程序
,而不是自动配置的调度程序。

因此,如果存在@EnableScheduling,则不使用
spring.integration.taskScheduler.poolSize
。感谢Artem的快速回复。非常清楚。我觉得很奇怪,spring集成和spring默认共享同一个线程池,因为它们显然涵盖了不同的需求,并且应该需要不同的配置。根据我们的问题,我倾向于尝试使我们的进程更具并发性,而不是覆盖spring引导自动配置。无论如何,我都会尝试自定义调度程序的方式,只是为了我的个人知识。再次感谢你的回答,这并不奇怪。这就是配置约定的工作原理。与您自动配置安全性的方式相同,它应用于应用程序中的任何地方。或者您配置了一个数据库,
数据源
在任何地方都是相同的。因此,只需将此
调度程序
视为一个公共共享资源,它在自动配置后在任何地方都是相同的。那么,为什么池大小的默认值在SI中为10,在SB autoconfig中为1?好吧,我不会混淆这一点。你不能将苹果与苹果进行比较:SpringBoot只是其他Spring库之上的一个自动配置框架。它有自己的观点(记住配置约定)覆盖了默认情况下这些库的内容,这并不奇怪。例如,Spring框架没有为
@EnableScheduling
公开
调度程序
bean,但是Spring Boot会公开,等等。我理解自动配置的自以为是的方式。不过,困扰我的是线程池是共享的。对我来说,SI应该有自己的可配置线程池。但肯定有很多副作用我没有看到,这显然是我不是专家的东西。
private void registerTaskScheduler() {
  if (!this.beanFactory.containsBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME)) {
    ...
    this.registry.registerBeanDefinition(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME, scheduler);
  }
}