我想通过将传入的csv文件传输到目标银行的sftp服务器来将springboot与SFTP集成。我已经为此获得了一些在线帮助。我正在使用DefaultSftpSessionFactory和SftpMessageHandler,但是当我尝试运行该应用程序时,它将停止。
这是控制台错误:
。 ____ _ __ _ _ _ / \ / ' __ _ ()_ __ __ _ _ \ \ \ \ (()_ |'_ |' | |' / `| \ \ \ \ \ / )| | )| | | | | || ( | | |)))) '| ____ | | |。 | | | | __,| / / / / ======== | _ | ============= | ___ / = / / / _ / :: Spring Boot ::(v2.0.4.RELEASE)
2019-08-02 06:41:23.404信息8780 --- [main] cpSpringSftpUploadDemoApplication:使用PID 8780在IP-C6135561上启动SpringSftpUploadDemoApplication(D:\ Users \ tanmoy \ sftp_POC \ java-examples \ spring-sftp -upload-demo \ target \ classes由tanmoy在D:\ Users \ tanmoy \ sftp_POC \ java-examples \ spring-sftp-upload-demo启动) 2019-08-02 06:41:23.408信息8780 --- [main] c.p.SpringSftpUploadDemoApplication:未设置活动配置文件,回退到默认配置文件:默认 2019-08-02 06:41:23.457 INFO 8780 --- [main] s.c.a.AnnotationConfigApplicationContext:刷新org.springframework.context.annotation.AnnotationConfigApplicationContext@14ec4505:启动日期[2019年8月2日星期五06:41:23 EDT];上下文层次结构的根 2019-08-02 06:41:23.887信息8780-[[main] o.s.i.config.IntegrationRegistrar:未明确定义名为'integrationHeaderChannelRegistry'的bean。因此,将创建一个默认的DefaultHeaderChannelRegistry。 2019-08-02 06:41:24.152 INFO 8780 --- [main] faultConfiguringBeanFactoryPostProcessor:尚未明确定义名为'errorChannel'的bean。因此,将创建一个默认的PublishSubscribeChannel。 2019-08-02 06:41:24.163信息8780 --- [main] faultConfiguringBeanFactoryPostProcessor:尚未明确定义名为'taskScheduler'的bean。因此,将创建一个默认的ThreadPoolTaskScheduler。 2019-08-02 06:41:24.325信息8780 --- [main] trationDelegate $ BeanPostProcessorChecker:类型为[org.springframework.integration.config.IntegrationManagementConfiguration $$ EnhancerBySpringCGLIB $类型的Bean'org.springframework.integration.config.IntegrationManagementConfiguration' $ f82eb420]不符合所有BeanPostProcessor的处理要求(例如:不符合自动代理的条件) 2019-08-02 06:41:24.518信息8780 --- [main] o.s.s.c.ThreadPoolTaskScheduler:初始化ExecutorService'taskScheduler' 2019-08-02 06:41:24.869信息8780 --- [main] o.s.j.e.a.AnnotationMBeanExporter:在启动时注册JMX暴露的bean 2019-08-02 06:41:24.881信息8780 --- [main] o.s.c.support.DefaultLifecycleProcessor:在阶段-2147483648中启动bean 2019-08-02 06:41:24.882信息8780 --- [main] o.s.i.endpoint.EventDrivenConsumer:将{message-handler:sftpConfig.handler.serviceActivator}添加为订户到'toSftpChannel'频道 2019-08-02 06:41:24.882信息8780 --- [main] o.s.integration.channel.DirectChannel:频道'application.toSftpChannel'有1个订阅者。 2019-08-02 06:41:24.883信息8780 --- [main] o.s.i.endpoint.EventDrivenConsumer:已启动sftpConfig.handler.serviceActivator 2019-08-02 06:41:24.883信息8780 --- [main] o.s.c.support.DefaultLifecycleProcessor:在阶段0中启动bean 2019-08-02 06:41:24.883信息8780 --- [主] ProxyFactoryBean $ MethodInvocationGateway:已启动sftpConfig $ UploadGateway 2019-08-02 06:41:24.883信息8780 --- [main] o.s.i.gateway.GatewayProxyFactoryBean:已启动sftpConfig $ UploadGateway 2019-08-02 06:41:24.883信息8780 --- [main] o.s.i.endpoint.EventDrivenConsumer:将{logging-channel-adapter:_org.springframework.integration.errorLogger}添加为'errorChannel'频道的订户 2019-08-02 06:41:24.883 INFO 8780 --- [main] o.s.i.channel.PublishSubscribeChannel:频道'application.errorChannel'有1个订阅者。 2019-08-02 06:41:24.883信息8780 --- [main] o.s.i.endpoint.EventDrivenConsumer:已启动_org.springframework.integration.errorLogger 2019-08-02 06:41:24.894信息8780 --- [main] c.p.SpringSftpUploadDemoApplication:在1.908秒内启动SpringSftpUploadDemoApplication(JVM运行2.548) 2019-08-02 06:41:24.898信息8780 --- [Thread-3] scaAnnotationConfigApplicationContext:关闭org.springframework.context.annotation.AnnotationConfigApplicationContext@14ec4505:启动日期[2019年8月2日星期五06:41:23 EDT ;上下文层次结构的根 2019-08-02 06:41:24.900信息8780 --- [Thread-3] o.s.c.support.DefaultLifecycleProcessor:在阶段0停止bean 2019-08-02 06:41:24.900信息8780 --- [线程3] ProxyFactoryBean $ MethodInvocationGateway:已停止sftpConfig $ UploadGateway 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.i.gateway.GatewayProxyFactoryBean:已停止sftpConfig $ UploadGateway 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.i.endpoint.EventDrivenConsumer:删除{logging-channel-adapter:_org.springframework.integration.errorLogger}作为'errorChannel'频道的订阅者 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.i.channel.PublishSubscribeChannel:频道'application.errorChannel'有0个订阅者。 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.i.endpoint.EventDrivenConsumer:已停止_org.springframework.integration.errorLogger 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.c.support.DefaultLifecycleProcessor:在阶段-2147483648停止bean 2019-08-02 06:41:24.901信息8780 --- [Thread-3] o.s.i.endpoint.EventDrivenConsumer:删除{message-handler:sftpConfig.handler.serviceActivator}作为'toSftpChannel'频道的订阅者 2019-08-02 06:41:24.902信息8780-[线程3] o.s.integration.channel.DirectChannel:频道'application.toSftpChannel'有0个订阅者。 2019-08-02 06:41:24.902信息8780 --- [Thread-3] o.s.i.endpoint.EventDrivenConsumer:停止了sftpConfig.handler.serviceActivator 2019-08-02 06:41:24.904 INFO 8780 --- [Thread-3] o.s.j.e.a.AnnotationMBeanExporter:关机时注销JMX暴露的bean 2019-08-02 06:41:24.906信息8780 --- [Thread-3] o.s.s.c.ThreadPoolTaskScheduler:关闭ExecutorService'taskScheduler'
SftpConfig.java:
@配置 公共类SftpConfig {
@Value("${sftp.host}")
private String sftpHost;
@Value("${sftp.port:22}")
private int sftpPort;
@Value("${sftp.user}")
private String sftpUser;
@Value("${sftp.privateKey:#{null}}")
private Resource sftpPrivateKey;
@Value("${sftp.privateKeyPassphrase:}")
private String sftpPrivateKeyPassphrase;
@Value("${sftp.password:#{null}}")
private String sftpPassword;
@Value("${sftp.remote.directory:/}")
private String sftpRemoteDirectory;
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(sftpHost);
factory.setPort(sftpPort);
factory.setUser(sftpUser);
if (sftpPrivateKey != null) {
factory.setPrivateKey(sftpPrivateKey);
factory.setPrivateKeyPassphrase(sftpPrivateKeyPassphrase);
} else {
factory.setPassword(sftpPassword);
}
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public MessageHandler handler() {
SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression(sftpRemoteDirectory));
handler.setFileNameGenerator(new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
}
});
return handler;
}
@MessagingGateway
public interface UploadGateway {
@Gateway(requestChannel = "toSftpChannel")
void upload(File file);
}
}