簡體   English   中英

混合 spring-integration 和 spring 調度程序

[英]Mix spring-integration and spring scheduler

我們正在使用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 引導角度對配置的約定的期望也是正確的。 Only what you miss that @EnableScheduling is not a Spring Boot feature, but rather Spring Framework native: https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling . Spring Boot jsut 給了我們額外的自由配置一些關於此事的 bean。 所以,我們只需要依賴它的自動配置。

如果自動配置不符合您的要求,您始終可以提供自己的配置並在必要時覆蓋。

查看 Spring 引導中的@EnableScheduling 、其@Scheduled鈎子和適當的TaskSchedulingAutoConfiguration ,要同時覆蓋您想要使 Spring 集成滿意的任何內容並不容易。 所以,我們應該 go 有點相反的方向,並真正覆蓋 Spring 集成端點的Scheduler 在您使用poller的每個地方,您還需要配置自定義Scheduler而不是自動配置的調度程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM