如何解决春季整合-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"
}]
}
添加重试建议以重试。
基于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 举报,一经查实,本站将立刻删除。