是否可以从数据源为每个实体配置轮询器?

问题描述

我正在通过Spring集成开发一种多属性微服务。我从LOGIN表之类的数据库获取每个属性登录凭据。 LOGIN表具有以下字段; LOGIN.username,LOGIN.pass和LOGIN.period(轮询周期)。如果我想根据LOGIN.period字段使用具有不同轮询器配置的微服务,该怎么做?

validate

是否有可能基于数据库中的LOGIN.period值来实现一个组件,以使工作流以不同的轮询器配置?

解决方法

基于Artem Bilan的回答,我实现了IntegrationFlowContext和IntegrationFlow实例;

    @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();
        });
    }

,

请显示如何从数据库中获取该信息。

但是,如果您认为您可能在数据库中有多个记录,并且想要为所有记录都具有多个轮询器,那么您需要查看动态流注册:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/dsl.html#java-dsl-runtime-flows

因此,您从数据库读取数据,在循环中为每条记录创建IntegrationFlow,并根据记录中的数据配置其轮询器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...