如何使用Java Config配置SFTP出站网关?

时间:2016-09-02 13:24:45

标签: spring-integration spring-integration-sftp

我想通过SFTP将SFTP出站网关用于get文件,但我只找到使用XML配置的示例。如何使用Java配置完成?

更新(感谢Artem Bilan帮助)

MyConfiguration类:

@Configuration
public class MyConfiguration {

    @Bean
    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory sftpSessionFactory = new DefaultSftpSessionFactory();
        sftpSessionFactory.setHost("myhost");
        sftpSessionFactory.setPort(22);
        sftpSessionFactory.setUser("uname");
        sftpSessionFactory.setPassword("pass");
        sftpSessionFactory.setAllowUnknownKeys(true);
        return new CachingSessionFactory<LsEntry>(sftpSessionFactory);
    }

    @Bean
    @ServiceActivator(inputChannel = "sftpChannel")
    public MessageHandler handler() {
        SftpOutboundGateway sftpOutboundGateway = new  SftpOutboundGateway(sftpSessionFactory(), "get", "#getPayload() == '/home/samadmin/test.endf'");
        sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/"));
        return sftpOutboundGateway;
    }

}

我的申请类:

@SpringBootApplication
@EnableIntegration
public class TestIntegrationApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestIntegrationApplication.class, args);
    }
}

配置现在成功但没有SFTP发生。需要弄清楚如何申请SFTP。

1 个答案:

答案 0 :(得分:4)

引用Reference Manual

@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
    return new SftpOutboundGateway(ftpSessionFactory(), "ls");
}

还要注意下一节中的Java DSL示例。

修改

@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
    SftpOutboundGateway sftpOutboundGateway = new  SftpOutboundGateway(sftpSessionFactory(), "get", "payload");
    sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/"));
    return sftpOutboundGateway;
}

GET SFTP命令的情况下,expression ctor arg可能与上面一样 - 只是对所有传入消息的Message.getPayload()的引用。

在这种情况下,您应该发送到sftpChannel Message,如:

new GenericMessage<>("/home/samadmin/test.endf");

因此,/home/samadmin/test.endfpayload的{​​{1}}。当它到达Message时,将根据该消息评估该表达式,并由SpEL调用SftpOutboundGateway。因此,getPayload()命令将使用所需的远程文件路径执行。

其他消息可能与其他文件的路径完全不同。