如何使用 transactionSynchronizationFactory 将文件从入站远程目录移动到另一个远程目录

问题描述 投票:0回答:2

我的要求是从 FTP 远程目录读取文件,将有效负载值插入数据库,然后将文件从远程目录 /in 移动到同一 FTP 服务器的远程目录 /archive。

我正在使用 spring 集成 @InboundChannelAdapter 并能够调用 ExpressionEvaluatingTransactionSynchronizationProcessor setAfterCommitExpression。我正在努力寻找一种方法来构造 spel 解析表达式以从入站远程目录移动到另一个目录。

java spring-boot spring-integration ftps
2个回答
0
投票

setAfterCommitExpression
是针对
Message
作为根对象执行的。 该消息正是
FtpInboundFileSynchronizingMessageSource
所产生的。该消息的有效负载是
FTPFile
。还有一些额外的标题:

            messageBuilder.setHeader(FileHeaders.REMOTE_HOST_PORT, uri.getHost() + ':' + uri.getPort())
                    .setHeader(FileHeaders.REMOTE_DIRECTORY, uri.getPath())
                    .setHeader(FileHeaders.REMOTE_FILE, uri.getFragment());

因此,您可以从该表达式(如

@myFtpMoveService.moveRemoteFile(#root)
)调用某些服务,并在该方法中接受
Message
以及确定远程文件、其名称和目录所需的所有信息。


0
投票

我创建了一个消息网关

@MessagingGateway
public interface FtpGateway {
  @Gateway(requestChannel = "ftpChannel")
  void sendFile(File file);
}

和@ServiceActivator

 @Bean
  @ServiceActivator(inputChannel = "ftpChannel")
  public MessageHandler ftpFileTransferMessageHandler() {
    // MessageHandler config..
  }

并为 TransactionSynchronizationFactory 中的 setAfterCommitExpression 提供 @Gateway 方法

"@ftpGateway.sendFileToArchive(payload)")
作为 SPEL

  spelParser.parseExpression("@ftpGateway.sendFileToArchive(payload)"));
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.