我想通过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。
答案 0 :(得分:4)
@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.endf
是payload
的{{1}}。当它到达Message
时,将根据该消息评估该表达式,并由SpEL调用SftpOutboundGateway
。因此,getPayload()
命令将使用所需的远程文件路径执行。
其他消息可能与其他文件的路径完全不同。