我正在使用sftp出站适配器将ItemWriter中生成的文件成功传输到sftp服务器。
以下是我的sftp出站网关的java dsl配置。
@Bean 公共IntegrationFlow sftpOutboundFlow(){
return IntegrationFlows.from("toSftpChannel")
.handle(Sftp.outboundAdapter(delegatingSessionFactory(sessionFactoryLocator), FileExistsMode.REPLACE)
.useTemporaryFileName(false)
.fileNameExpression("headers['" + FileHeaders.FILENAME + "']")
.remoteDirectoryExpression("headers.path")
.autoCreateDirectory(true),
c -> c.advice(expressionAdvice(c))) .get();
}
/**
* Advice to remove local files after successful upload
*
* @param c
* @return
*/
@Bean
public Advice expressionAdvice(GenericEndpointSpec<FileTransferringMessageHandler<ChannelSftp.LsEntry>> c) {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
advice.setOnSuccessExpressionString("payload.delete()");
advice.setOnFailureExpressionString("payload + ' failed to upload'");
advice.setTrapException(true);
return advice;
}
/**
* Channel for uploading files
*
*
*/
@MessagingGateway
public interface LettersUploadGateway {
@Gateway(requestChannel = "toSftpChannel")
void upload(@Payload File file, @Header("path") String path);
}
更新: 我从ItemWriter调用网关的上载方法来传输文件,如下所示:
lettersGateway.upload(fileName,batchConfiguration.getLettersDirectory());
指定的目录是我要在其中传输文件的远程目录。
在此过程中,我注意到临时本地文件是在我的项目根文件夹中创建的(成功sftp传输之后会删除它们),有一种方法可以将本地临时文件的位置更改为“ c: / temp /”?
感谢您的帮助。