Spring integration spring集成-SFTP确保上传成功
如何确保文件是否成功上传到SFTP服务器。我想确保SFTP上传成功,然后我只想应用其他逻辑。这是我要上传的代码Spring integration spring集成-SFTP确保上传成功,spring-integration,sftp,spring-integration-sftp,Spring Integration,Sftp,Spring Integration Sftp,如何确保文件是否成功上传到SFTP服务器。我想确保SFTP上传成功,然后我只想应用其他逻辑。这是我要上传的代码 @Bean public DefaultSftpSessionFactory sftpSessionFactory() throws IOException { DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(); factory.setHost(config.getSftpHost
@Bean
public DefaultSftpSessionFactory sftpSessionFactory() throws IOException {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
factory.setHost(config.getSftpHost());
factory.setPort(Integer.parseInt(config.getSftpPort()));
factory.setUser(config.getSftpUser());
factory.setAllowUnknownKeys(true);
factory.setTimeout(10000);
factory.setPrivateKey(new ClassPathResource(config.getPrivateKey()));
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public SftpMessageHandler uploadHandler() throws IOException {
SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression(config.getSftpRemoteDirectory()));
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);
}
不清楚你的意思是什么;如果上载失败,将引发异常 您可以向
SftpMessageHandler
添加重试建议以重试
基于Gary关于向重试添加重试建议的建议。我越来越不正常了
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'toSftpChannel' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:805)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1278)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:297)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
at org.springframework.integration.support.channel.BeanFactoryChannelResolver.resolveDestination(BeanFactoryChannelResolver.java:89)
at org.springframework.integration.support.channel.BeanFactoryChannelResolver.resolveDestination(BeanFactoryChannelResolver.java:46)
at org.springframework.integration.gateway.MessagingGatewaySupport.getRequestChannel(MessagingGatewaySupport.java:387)
at org.springframework.integration.gateway.MessagingGatewaySupport.send(MessagingGatewaySupport.java:422)
at org.springframework.integration.gateway.GatewayProxyFactoryBean.sendOrSendAndReceive(GatewayProxyFactoryBean.java:568)
at org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(GatewayProxyFactoryBean.java:489)
at org.springframework.integration.gateway.GatewayProxyFactoryBean.doInvoke(GatewayProxyFactoryBean.java:464)
at org.springframework.integration.gateway.GatewayProxyFactoryBean.invoke(GatewayProxyFactoryBean.java:453)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy79.upload(Unknown Source)
我的sftp配置如下所示
@Bean
public DefaultSftpSessionFactory sftpSessionFactory() throws IOException {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
//session config here, port, host, private key
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel", adviceChain="retryAdvice")
public SftpMessageHandler uploadHandler() throws IOException {
final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression(config.getSftpRemoteDirectory()));
//handler.setChmod(0600);
handler.setFileNameGenerator(new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
logger.info("Files request payload : " + message.getPayload().toString());
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);
}
@Bean
public SimpleRetryPolicy retryPolicy(){
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
return retryPolicy;
}
@Bean
public FixedBackOffPolicy fixedBackOffPolicy(){
FixedBackOffPolicy p = new FixedBackOffPolicy();
p.setBackOffPeriod(1000);
return p;
}
@Bean
public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy,
FixedBackOffPolicy fixedBackOffPolicy){
RequestHandlerRetryAdvice retryAdvice = new RequestHandlerRetryAdvice();
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
retryAdvice.setRetryTemplate(retryTemplate);
return retryAdvice;
}
@Bean
公共默认sftpSessionFactory sftpSessionFactory()引发IOException{
DefaultSftpSessionFactory=新的DefaultSftpSessionFactory();
//此处的会话配置、端口、主机、私钥
}
@豆子
@ServiceActivator(inputChannel=“toSftpChannel”,adviceChain=“retryAdvice”)
公共SftpMessageHandler uploadHandler()引发IOException{
final SftpMessageHandler=新的SftpMessageHandler(sftpSessionFactory());
setRemoteDirectoryExpression(新的LiteralExpression(config.getSftpRemoteDirectory());
//handler.setChmod(0600);
handler.setFileNameGenerator(新FileNameGenerator(){
@凌驾
公共字符串generateFileName(消息){
if(message.getPayload()instanceof文件){
logger.info(“文件请求负载:+message.getPayload().toString());
返回((文件)message.getPayload()).getName();
}否则{
抛出新的IllegalArgumentException(“预期为有效负载的文件”);
}
}
});
返回处理程序;
}
@消息网关
公共接口上传网关{
@网关(requestChannel=“toSftpChannel”)
无效上传(文件);
}
@豆子
公共简单政策retryPolicy(){
SimpleRetryPolicy retryPolicy=新的SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
退货政策;
}
@豆子
public FixedBackOffPolicy FixedBackOffPolicy(){
FixedBackOffPolicy p=新的FixedBackOffPolicy();
p、 退避期(1000);
返回p;
}
@豆子
公共请求HandlerRetryAdvice retryAdvice(简单策略retryPolicy,
固定回退政策(固定回退政策){
RequestHandlerRetryAdvice retryAdvice=新建RequestHandlerRetryAdvice();
RetryTemplate RetryTemplate=新RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
setRetryTemplate(retryTemplate);
回复回复建议;
}
我的意思是,一旦文件上传到远程服务器,我们如何确保它成功地传输到远程(SFTP)服务器如果没有引发异常,那么它就是成功的。就这么简单。
@Bean
public DefaultSftpSessionFactory sftpSessionFactory() throws IOException {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
//session config here, port, host, private key
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel", adviceChain="retryAdvice")
public SftpMessageHandler uploadHandler() throws IOException {
final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression(config.getSftpRemoteDirectory()));
//handler.setChmod(0600);
handler.setFileNameGenerator(new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
logger.info("Files request payload : " + message.getPayload().toString());
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);
}
@Bean
public SimpleRetryPolicy retryPolicy(){
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
return retryPolicy;
}
@Bean
public FixedBackOffPolicy fixedBackOffPolicy(){
FixedBackOffPolicy p = new FixedBackOffPolicy();
p.setBackOffPeriod(1000);
return p;
}
@Bean
public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy,
FixedBackOffPolicy fixedBackOffPolicy){
RequestHandlerRetryAdvice retryAdvice = new RequestHandlerRetryAdvice();
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
retryAdvice.setRetryTemplate(retryTemplate);
return retryAdvice;
}