Я использую исходящий адаптер sftp для успешной передачи файлов, созданных в ItemWriter, на сервер sftp.
Ниже приведена конфигурация java dsl для моего исходящего шлюза sftp.
@ Bean public 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 /"?
Спасибо за вашу помощь.