微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

春季整合-SFTP确保上传成功

如何解决春季整合-SFTP确保上传成功

我们如何确定文件是否成功上传到SFTP服务器。我要确保SFTP上传成功,然后才需要应用其他逻辑。这是我要上传代码

 @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);
   }

我看到日志看起来不错。验证文件上传到SFTP服务器。但是以某种方式我无法确保文件已在服务器上上传。请告知如何添加代码以确保文件成功上传

  jsch Connecting to info.xyz.com port 22
  jsch Connection established
  jsch Remote version string: SSH-.0-Internal_SFTP__100
  jsch Local version string: SSH-.0-JSCH-0.1.4
  jsch CheckCiphers: aes6-ctr,aes19-ctr,aes18-ctr,aes6-cbc,aes19-cbc,aes18-cbc,des-ctr,arcfour,arcfour18,arcfour6
  jsch CheckKexes: diffie-hellman-group14-sha1,ecdh-sha-nistp6,ecdh-sha-nistp84,ecdh-sha-nistp1
  jsch CheckSignatures: ecdsa-sha-nistp6,ecdsa-sha-nistp84,ecdsa-sha-nistp1
  jsch SSH_MSG_KEXINIT sent
  jsch SSH_MSG_KEXINIT received
  jsch kex: server: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha6,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
  jsch kex: server: ssh-rsa
  jsch kex: server: aes18-ctr,aes6-ctr,des-cbc,blowfish-cbc,arcfour6
  jsch kex: server: aes18-ctr,arcfour6
  jsch kex: server: hmac-sha-6,hmac-sha1-96,hmac-sha1,hmac-sha-1,hmac-md,hmac-sha-1-96,hmac-sha-6-96,hmac-md-96,hmac-sha6,hmac-sha6@ssh.com
  jsch kex: server: hmac-sha6,hmac-sha-6,hmac-sha6@ssh.com
  jsch kex: server: none
  jsch kex: server: none
  jsch kex: server: 
  jsch kex: server: 
  jsch kex: client: ecdh-sha-nistp6,ecdh-sha-nistp1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
  jsch kex: client: ssh-rsa,ssh-dss,ecdsa-sha-nistp6,ecdsa-sha-nistp1
  jsch kex: client: aes18-ctr,aes19- 
 ctr,aes6-cbc
  jsch kex: client: aes18-ctr,aes19- 
   ctr,aes6-cbc
  jsch kex: client: hmac-md,hmac-md-96
  jsch kex: client: hmac-md,hmac-md-96
  jsch kex: client: none
  jsch kex: client: none
  jsch kex: client: 
  jsch kex: client: 
  jsch kex: server->client aes1-ctr hmac-md none
  jsch kex: client->server aes1-ctr hmac-md none
  jsch SSH_MSG_KEXDH_INIT sent
  jsch expecting SSH_MSG_KEXDH_REPLY
  jsch ssh_rsa_verify: signature true
  jsch Host 'info.xyz.com' is kNown and matches the RSA host key
  jsch SSH_MSG_NEWKEYS sent
  jsch SSH_MSG_NEWKEYS received
  jsch SSH_MSG_SERVICE_REQUEST sent
  jsch SSH_MSG_SERVICE_ACCEPT received
  jsch Authentications that can continue: publickeykeyboard-interactivepassword
  jsch Next authentication method: publickey
  jsch Authentication succeeded (publickey).
  jsch disconnecting from info.xyz.com port 22

解决方法

不清楚您的意思;如果上传失败,将引发异常。

您可以向{ "gstin": "12ABCDE","fp": "082019","b2b": [{ "ctin": "2312ABCDEY","cfs": "Y","cfs3b": "Y","inv": [{ "val": 1072,"itms": [{ "num": 1,"itm_det": { "csamt": 0,"samt": 81.76,"rt": 18,"txval": 908.48,"camt": 81.76 } }],"inv_typ": "R","pos": "23","idt": "02-08-2019","rchrg": "N","inum": "642","chksum": "7a58ec7342001040acf4509176ba22ceb03d9ad0ecf7e74d572af0ec4d8429fa" },{ "val": 1072,"idt": "17-08-2019","inum": "722","chksum": "0597afa614e27aa78dc252f2530172007e574f52d1ceea9e433e04f474414bbf" }],"fldtr1": "10-Sep-19","flprdr1": "Aug-19" },{ "ctin": "22AAB1Z5","inv": [{ "val": 459463,"itms": [{ "num": 1801,"txval": 389375,"iamt": 70087.5 } }],"idt": "30-08-2019","inum": "2495","chksum": "15ef392cfd4fd3af2fce1ad8549f93bac20cf17308df9bf9256ae838db45a440" }],"fldtr1": "11-Sep-19",{ "ctin": "23AFEZI","inv": [{ "val": 9350,"samt": 713.16,"txval": 7924,"camt": 713.16 } }],"inum": "00075","chksum": "cb4fe40cb2f39f8782a160ece273991daae68b739dfba454ffeb364150d03580" },{ "val": 12312,"samt": 939.07,"txval": 10434.09,"camt": 939.07 } }],"idt": "10-08-2019","inum": "00084","chksum": "1d0fa36c2a7f1ffe7d7c07a829056e4e28fd0300fd593f91ba8216ace4e54f2a" }],"fldtr1": "05-Sep-19",{ "ctin": "23ECVPSQ","inv": [{ "val": 10200,"samt": 777.97,"txval": 8644.1,"camt": 777.97 } }],"idt": "13-08-2019","inum": "650","chksum": "43bcf7c73bf94013344111d95c6f80dea47980ef4bfd3093a33e2c385baa2fdd" },{ "val": 4745,"samt": 361.91,"txval": 4021.18,"camt": 361.91 } }],"inum": "727","chksum": "fae1037d879dc718f322e8622a5323344a6cf88b68f68620aaa7ed5d92a15a23" }] }添加重试建议以重试。

https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/messaging-endpoints.html#message-handler-advice-chain

,

基于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;
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?