Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 integration 如何在运行时注册集成流?_Spring Integration_Spring Integration Dsl - Fatal编程技术网

Spring integration 如何在运行时注册集成流?

Spring integration 如何在运行时注册集成流?,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,我正在为多个属性构建一个微服务。因此,每个属性都有不同的配置。为了做到这一点,我实现了这样的东西 @Autowired IntegrationFlowContext flowContext; @Bean public void setFlowContext() { List<Login> loginList = DAO.getLoginList(); // a web service loginList.forEach

我正在为多个属性构建一个微服务。因此,每个属性都有不同的配置。为了做到这一点,我实现了这样的东西

    @Autowired
    IntegrationFlowContext flowContext;

    @Bean
    public void setFlowContext() {
        List<Login> loginList = DAO.getLoginList(); // a web service
        loginList.forEach(e -> {
            IntegrationFlow flow = IntegrationFlows.from(() -> e, c -> c.poller(Pollers.fixedRate(e.getPeriod(), TimeUnit.SECONDS, 5)))
                    .channel("X_CHANNEL")
                    .get();
            flowContext.registration(flow).register();
        });
    }
    @Bean
    public IntegrationFlow setFlowContext() {
        return IntegrationFlows
                .from(this::getSpecification, p -> p.poller(Pollers.fixedRate(X))) // the specification is constant.
                .transform(payload -> DAO.getLoginList(payload))
                .split()
                .<Login>handle((payload, header) -> {
                    IntegrationFlow flow = IntegrationFlows.from(() -> payload, c -> c.poller(Pollers.fixedRate(payload.getPeriod(), TimeUnit.SECONDS, 5)))
                    .channel("X_CHANNEL")
                    .get();
                    flowContext.registration(flow).register().start();
                    return null;
                })
                .get();
    }

最后,我已经阅读了,但仍然无法实现此功能。

动态流注册不能在
@Bean
定义中使用


它设计用于在应用程序上下文完全初始化后的运行时使用。

是的。。。看起来他在他的第二个代码片段中正确地做到了……那么它是如何工作的呢?您不需要调用它
start()
,因为默认情况下它是自动启动的。我想知道你是否真的需要注册这个动态流。看起来您刚刚将
登录
发送到该
X\u频道
。为什么不从主流开始呢?您可能需要考虑使用
幂等接收器
,以避免在下一次轮询中主流执行其内容时重复
登录
flowContext.registration(flow).register().start();