Spring integration Spring集成DSL在Java1.7中创建Sftp出站适配器

Spring integration Spring集成DSL在Java1.7中创建Sftp出站适配器,spring-integration,Spring Integration,我已经在spring DSL中创建了一个Sftp出站流,我还在Sftp出站流之上创建了一个文件入站流,用于从本地目录查找文件,并将其发送到消息通道,该通道负责将文件复制到远程目录,但当我运行代码时,没有文件被复制到远程目录目录所以我被困在这一点上,请任何人提供任何指向它的指针,因为我无法继续 这是我的会话工厂 @Autowired private DefaultSftpSessionFactory sftpSessionFactory; @Bean public

我已经在spring DSL中创建了一个Sftp出站流,我还在Sftp出站流之上创建了一个文件入站流,用于从本地目录查找文件,并将其发送到消息通道,该通道负责将文件复制到远程目录,但当我运行代码时,没有文件被复制到远程目录目录所以我被困在这一点上,请任何人提供任何指向它的指针,因为我无法继续

这是我的会话工厂

    @Autowired
    private DefaultSftpSessionFactory sftpSessionFactory;

    @Bean
    public DefaultSftpSessionFactory sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(
                true);
        factory.setHost("111.11.12.143");
        factory.setPort(22);
        factory.setUser("sftp");
        factory.setPassword("*******");         
        return factory;
    }
这是我的sftp出站流程

    @Bean
    public IntegrationFlow sftpOutboundFlow() {
        return IntegrationFlows
                .from("toSftpChannel")
                .handle(Sftp.outboundAdapter(this.sftpSessionFactory)
                        .remoteFileSeparator("\\")
                        .useTemporaryFileName(false)
                        .remoteDirectory(remDir)).get();
    }
这是我的文件入站流

    @Bean
    public IntegrationFlow fileReadingFlow() {
        return IntegrationFlows
                .from(fileMessageSource(),
                         new Consumer<SourcePollingChannelAdapterSpec>() {

                    @Override
                    public void accept(SourcePollingChannelAdapterSpec e) {
                        e.poller(Pollers.fixedRate(6));
                    }
                })
                .transform(Transformers.fileToByteArray())
                .channel(MessageChannels.queue("fileReadingResultChannel"))
                .get();
    }
@Bean
公共集成流文件ReadingFlow(){
返回积分流
.from(fileMessageSource(),
新消费者(){
@凌驾
公共无效接受(SourcePollingChannelAdapterSpec e){
e、 轮询器(固定轮询器(6));
}
})
.transform(Transformers.fileToByteArray())
.channel(MessageChannels.queue(“fileReadingResultChannel”))
.get();
}
这是MessageSource方法

    @Bean
    public MessageSource<File> fileMessageSource() {

        FileReadingMessageSource source = new FileReadingMessageSource();
        source.setDirectory(new File(localDir));
        source.setAutoCreateDirectory(true);
        System.out.println("enter fileMessageSource....."+ source.receive());
        return source;
    }
@Bean
public MessageSource fileMessageSource(){
FileReadingMessageSource=新建FileReadingMessageSource();
setDirectory(新文件(localDir));
source.setAutoCreateDirectory(true);
System.out.println(“输入fileMessageSource…”+source.receive());
返回源;
}
这是我的Junit测试方法

@Autowired
private DefaultSftpSessionFactory sftpSessionFactory;

@Autowired
@Qualifier("toSftpChannel")
private MessageChannel toSftpChannel;

@Autowired  
@Qualifier("fileReadingResultChannel")
private PollableChannel fileReadingResultChannel;

@Test
public void testSftpOutboundFlow() {        
    Message<?> message = ((PollableChannel) fileReadingResultChannel)
            .receive(600);
    System.out.println("message....."+message);     
    this.toSftpChannel.send(message);       
}       
@Autowired
私有DefaultSftpSessionFactory sftpSessionFactory;
@自动连线
@限定符(“toSftpChannel”)
私有消息通道到ftpcchannel;
@自动连线
@限定符(“fileReadingResultChannel”)
专用可轮询通道fileReadingResultChannel;
@试验
public void testSftpOutboundFlow(){
消息消息=((PollableChannel)fileReadingResultChannel)
.接收(600);
System.out.println(“消息…”+消息);
此.toSftpChannel.send(消息);
}       

系统.out.println(“输入fileMessageSource…..”+source.receive())
fileMessageSource()
@Bean
中不好,因为您在那里执行
source.receive()
。这样做不是
SOUT
的责任

从另一方面来说,如果你能和我们分享一些关于这件事的线索会更好


还有一点:您是否在控制台中看到
System.out.println(“message…”+message)的结果

系统.out.println(“输入fileMessageSource…”+source.receive())
fileMessageSource()
@Bean
中不好,因为您在那里执行
source.receive()
。这样做不是
SOUT
的责任

从另一方面来说,如果你能和我们分享一些关于这件事的线索会更好


还有一点:您是否在控制台中看到
System.out.println(“message…”+message)的结果

当我的本地目录中只有一个文件时,“消息”为空,但如果有多个文件,则仅拾取第二个文件并将其复制到远程目录,然后停止处理。请查找相同的堆栈跟踪输入fileMessageSource.GenericMessage[payload=D:\local_copy\SFTP.TXT,headers={timestamp=1436937421367,id=37994faa-236c-b64f-6390-f496bebb6a19}]消息..空。这次我只保留了一个文件,消息是空的。嗨,Artem,我已经删除了System.out.println(“enter fileMessageSource…”+source.receive());来自fileMessageSource()方法。现在,第一个文件正在远程计算机中复制,但其他文件未复制。我认为民意测验仪工作不正常,但不确定。你能给点提示吗?那只是因为你的测试用例只关心第一个文件和出口。谢谢Artem,我能在我的测试方法的while循环中处理这个问题吗?像这样…@Test public void testSftpOutboundFlow(){while(!fileReadingResultChannel.equals(null)){Message Message=this.fileReadingResultChannel.receive(60000);this.toSftpChannel.send(Message);}}是的,您可以。或者只需手动将
filereadingsultchannel.receive()
作为您要测试的文件。当我的本地目录中只有一个文件时,“消息”为空,但如果有多个文件,则仅拾取第二个文件并通过远程目录复制它,然后停止处理。请查找相同的堆栈跟踪输入fileMessageSource.GenericMessage[payload=D:\local_copy\SFTP.TXT,headers={timestamp=1436937421367,id=37994faa-236c-b64f-6390-f496bebb6a19}]消息..空。这次我只保留了一个文件,消息是空的。嗨,Artem,我已经删除了System.out.println(“enter fileMessageSource…”+source.receive());来自fileMessageSource()方法。现在,第一个文件正在远程计算机中复制,但其他文件未复制。我认为民意测验仪工作不正常,但不确定。你能给点提示吗?那只是因为你的测试用例只关心第一个文件和出口。谢谢Artem,我能在我的测试方法的while循环中处理这个问题吗?像这样…@Test public void testSftpOutboundFlow(){while(!fileReadingResultChannel.equals(null)){Message Message=this.fileReadingResultChannel.receive(60000);this.toSftpChannel.send(Message);}}是的,您可以。或者只需手动生成您想要测试的文件的数量。