Я пытаюсь создать простую утилиту, которая скопирует файлы из нескольких каталогов с одного сервера sftp на другой сервер.Каталог опроса с несколькими подкаталогами
Я пробовал использовать исходящий шлюз sftp для опроса одного каталога высокого уровня с командой «mget», но это не сработало. Поэтому я подумал о написании двух входящих адаптеров (не очень хорошее решение, но все же хотел, чтобы это было сделано плохо!).
<int-sftp:inbound-channel-adapter
id="pdbInbound"
session-factory="sftpSessionFactory"
auto-create-local-directory="true" delete-remote-files="true"
filename-pattern="*.*" remote-directory="${remote.pdb.directory}"
local-directory="${local.pdb.directory}">
<int:poller fixed-rate="5000"/>
</int-sftp:inbound-channel-adapter>
<int-sftp:inbound-channel-adapter
id="galaxyInbound"
session-factory="sftpSessionFactory"
auto-create-local-directory="true" delete-remote-files="true"
filename-pattern="*.*" remote-directory="${remote.galaxy.directory}"
local-directory="${local.galaxy.directory}" >
<int:poller fixed-rate="5000"/>
</int-sftp:inbound-channel-adapter>
Над кодом работает отлично, и файлы копируются в локальные каталоги, как ожидалось.
Проблема возникает, когда мне необходимо перенести эти файлы в удаленный каталог с той же структурой каталогов, что и исходная директория. Я не смог достичь этого, используя шлюз sftp-outbound с командой = "mput" и command-options = "-R". Итак, я попытался написать два исходящих адаптера, как показано ниже. Но только один каталог записывается на удаленный. Любая идея, что здесь происходит не так?
<int:service-activator input-channel="pdbInbound" output-channel="pdbOutbound" expression="payload"/>
<int:service-activator input-channel="galaxyInbound" output-channel="galaxyOutbound" expression="payload"/>
<int-sftp:outbound-channel-adapter id="sftPdbOutboundAdapter" auto-create-directory="true"
session-factory="sftpSessionFactory"
auto-startup="true"
channel="pdbOutbound"
charset="UTF-8"
remote-file-separator="/"
remote-directory="${remote.out.pdb.directory}"
mode="REPLACE">
</int-sftp:outbound-channel-adapter>
<int-sftp:outbound-channel-adapter id="sftpGalaxyOutboundAdapter" auto-create-directory="true"
auto-startup="true"
session-factory="sftpSessionFactory"
channel="galaxyOutbound"
charset="UTF-8"
remote-file-separator="/"
remote-directory="${remote.out.galaxy.directory}"
mode="REPLACE">
</int-sftp:outbound-channel-adapter>
<int:poller default="true" fixed-delay="50"/>
Примечание: Я использую тот же SFTP сервер (но разные каталоги) для входящих и исходящих файлов для целей тестирования.