【问题标题】:Spring Integration: Get rid of code duplication for setting up beansSpring Integration:摆脱设置 bean 的代码重复
【发布时间】:2016-01-08 06:36:13
【问题描述】:

对于我的 SFTP 客户端项目,我使用的是 spring 集成。我们有不同的客户端,必须连接到不同的 SFTP 服务器,但是,所有的逻辑都是一样的,所以我把它们抽象成 AbstractSFTPEndPoint。每个特定于客户端的类都实现 getClientId(),AbstractSFTPEndPoint 使用它来获取特定于客户端的详细信息,例如 SFTP 凭据。

但是,所有客户端的整个逻辑都是相同的,但我仍然必须为每个客户端实现特定的类。这主要是因为我们需要为每个客户端提供单独的“MessageSource”。

我怎样才能摆脱这种重复?

public class SFTPEndPointForClientAAAA extends AbstractSFTPEndPoint {

    public String getClientId(){
       return "clientAAAA";
    }

    @Bean(name = "channelForClientAAAA")
    public QueueChannel inputFileChannel() {
        return super.inputFileChannel();
    }

    @ServiceActivator(inputChannel = "channelForClientAAAA", poller = @Poller(fixedDelay = "500"))
    public void serviceActivator(Message message) {
        super.serviceActivator(message);
    }

    @Bean(name = "messageSourceForClientAAAA")
    @InboundChannelAdapter(value = "channelForClientAAAA",
            poller = @Poller(fixedDelay = "50", maxMessagesPerPoll = "2"))
    public MessageSource messageSource() {
        return super.messageSource();
    }
}

基本上,我有一堆 SFTP 主机可以连接并应用相同的逻辑。我希望自动完成,而不必为每个 SFTP 主机实现类。

【问题讨论】:

    标签: spring-integration sftp


    【解决方案1】:

    the dynamic ftp sample。它使用 XML,但同样的技术适用于 Java 配置。它使用出站适配器;入站稍微复杂一些,因为您可能需要将它们挂钩到一个公共上下文中。自述文件中有关于如何执行此操作的链接。

    不过,我最近回复了similar question for multiple IMAP mail adapters using Java configuration,然后又回复了follow-up question

    你应该能够使用那里使用的技术。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多