Spring集成DSL从Main类运行Sftp OutBound流

时间:2015-07-22 10:24:49

标签: spring-integration

我创建了两个集成流程,一个是File inbound flow,它是查找我的本地目录,另一个是Sftp outbound flow,它将这些文件从本地发送到远程目录。我正在从Main类运行这些流,即不使用Junit。那么我如何从File Inbound流向Sftp outblound流发送消息。在Junit测试方法中,我可以使用send()方法进行文件传输,但在这种情况下无法发送文件。所以任何人都可以帮助我,因为我无法继续。

这是我的文件入站流程..

@Bean
public IntegrationFlow sftpOutboundFlow() {
    System.out.println("enter out  bound flow.....");
    return IntegrationFlows
            .from("toSftpChannel")
            .handle(Sftp.outboundAdapter(this.sftpSessionFactory)
                    .remoteFileSeparator("\\")
                    .useTemporaryFileName(false)
                    .remoteDirectory(remDir)).get();
}

这是我的sftp出境流程..

@Bean
public IntegrationFlow fileReadingFlow() {          
    return IntegrationFlows
            .from("fileReadingResultChannel")
            .transform(Transformers.fileToByteArray())
            .handle(Sftp.outboundAdapter(this.sftpSessionFactory)
                    .remoteFileSeparator("\\")
                    .useTemporaryFileName(false)
                    .remoteDirectory(remDir))
            //.channel(this.fileReadingResultChannel)
                    .channel(MessageChannels.direct("fileReadingResultChannel"))
            .get();
}

正如加里所说,我的新流程是......


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fileReadingFlow' defined in class src.SftpOutBoundDsl: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.integration.dsl.IntegrationFlow]: Factory method 'fileReadingFlow' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: The 'currentComponent' (org.springframework.integration.file.remote.handler.FileTransferringMessageHandler@629a) is a one-way 'MessageHandler' and it isn't appropriate to configure 'outputChannel'. This is the end of the integration flow.
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:602)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1111)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1006)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
    at src.MainSftpOutBoundDsl.main(MainSftpOutBoundDsl.java:14)

错误日志是......

.Range("$A:$S").AutoFilter field:=1, Criteria1:=Array("Ongoing", "Completed"), Operator:=xlFilterValues .Range("$A:$S").AutoFilter field:=4, Criteria1:=Array("AQs", "Prop", "RF", "RP", "SQs"), Operator:=xlFilterValues .Range("$A$1:$S$" & ActiveSheet.UsedRange.Rows.Count).AutoFilter field:=10, Criteria1:=">" & _ Format(Date - 7, "mm/dd/yyyy"), Operator:=xlOr, Criteria2:="=Not Known", Operator:=xlOr

1 个答案:

答案 0 :(得分:1)

将入站适配器通道更改为使用...

MessageChannels.direct("fileReadingResultChannel")

并将两个流连接在一起......

return IntegrationFlows
        .from("fileReadingResultChannel")
        .handle(...

修改

.channel(MessageChannels.direct(" fileReadingResultChannel&#34))

出站渠道适配器不会产生任何结果,因此您无法通过渠道跟踪它。

错误信息对我来说非常清楚......

  

... FileTransferringMessageHandler ...是一个单向的MessageHandler'并且配置" outputChannel'是不合适的。这是整合流程的结束。

...但如果您认为需要澄清,请告诉我们。

如果您希望在文件传输后继续流,请在变换器后添加publishSubscribeChannel,如果文件传输成功,则消息将转到另一个订户(流)。