如何在Spring集成中动态创建ftp适配器?

时间:2016-02-14 05:52:26

标签: java spring spring-integration spring-batch esb

感谢您的关注 我在我的项目中使用了spring集成,我想从多个ftp服务器检索许多输入文件,其中不同的地址如下图所示: enter image description here

如何在我的项目中动态创建inbound-adapter来从服务器轮询和检索文件?

2 个答案:

答案 0 :(得分:2)

如果您被允许使用非"一般可用性" (GA)版本的第三方库(例如,候选版本(RC)或里程碑(M)),然后您可以使用Spring Integration的5.0.0.M2版本。这是截至09年3月17日的最新published版本。

5.0开始,Spring Integration包含 Java DSL运行时流注册功能。它允许您定义集成流程(包括入站适配器),就像在标准bean中一样,但它可以在任何运行时刻完成。

您需要使用的只有以下三个步骤:

  1. 从Spring上下文获取IntegrationFlowContext bean,例如通过自动装配:
  2.   @Autowired
      public MyClass(IntegrationFlowContext flowContext) {
        this.flowContext = flowContext;
      }
    
    1. 使用它构建新流程,例如:
    2.   IntegrationFlowRegistration registration = flowContext
            .registration(IntegrationFlows   // this method accepts IntegrationFlow instance
                              .from(s -> s.ftp(ftpSessionFactory())
                                          .localFilter(localFileFilter())
                              //other actions
                              .get())        // standard end of DSL flow building process
            .autoStartup(true)               // not required but can be useful
            .register();                     // this makes the flow exist in the context
      
      1. 如果有时间删除动态创建的流量,只需使用您在上一步中获得的注册ID再次引用IntegrationFlowContext
      2. // retrieve registration ID from the object created above
        String dynamicFlowRegistrationId = registration.getId();
        // the following will also gracefully stop all the processes within the flow
        flowContext.remove(dynamicFlowRegistrationId);
        

        GitHub上还有一个DynamicTcpClient sample

答案 1 :(得分:1)

请参阅dynamic-ftp sample。虽然它只涵盖出站端,但README中有链接可以讨论在入站端需要做什么(将每个适配器放在子上下文中,将消息发送到主上下文中的通道)。

另请参阅我对similar question for multiple IMAP mail adapters using Java configurationfollow-up question的回答。

你应该可以使用那里使用的技术。