【发布时间】: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 主机实现类。
【问题讨论】: