使用sftp出站网关转移到sftp之前,更改本地目录的默认位置

时间:2019-01-28 18:45:11

标签: spring-integration spring-integration-dsl spring-integration-sftp

我正在使用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 /”?

感谢您的帮助。

0 个答案:

没有答案