Опрос локальной папки и отправка файлов на FTP с помощью Spring Integration - PullRequest
0 голосов
/ 26 ноября 2018

Я использую выходной канал интеграции с пружиной для отправки файлов на FTP-сервер (-ы). Из проведенных исследований я смог отправить один файл из папки на ftp, меня беспокоит то, что я хочу продолжатьопрос локальной папки ex: BEY / finalBEY.csv и когда есть файл с именем «finalBEY.csv», я хочу отправить его на определенный FTP-сервер, и если в папке нет файла, который я хочу продолжать наблюдатьили опрашивая папку, пока она не появится, я уверен, что это возможно, но не смог найти решение или правильное кодирование, спасибо за помощь

Код, который я использовал:

    public IntegrationFlow ftpOutboundFlow(Branch myBranch){
    return IntegrationFlows.from(OUTBOUND_CHANNEL)
            .handle(Ftp.outboundAdapter(createNewFtpSessionFactory(myBranch), FileExistsMode.REPLACE)
                    .useTemporaryFileName(true)
                    .autoCreateDirectory(true)

                    //.remoteFileSeparator("/")
                    .fileNameExpression("headers['" + FileHeaders.FILENAME + "']")

                    //.fileNameExpression("BEY/FEFOexportBEY.csv")
                    .remoteDirectory(myBranch.getFolderPath()))

            .get();
}

@Bean
public MessageChannel OUTBOUND_CHANNEL(){
    return new PublishSubscribeChannel();
}

@MessagingGateway
public interface MyGateway {

    @Gateway(requestChannel = OUTBOUND_CHANNEL)
    void sendToFtp(File file);

}

В контроллере, где я регистрирую поток и отправляю файл.

private void addFlowftpOutbound(String name) {
        branch = branchService.getById(Long.valueOf(name));
        System.out.println(branch.getBranchCode());
        IntegrationFlow flow = ftIntegration.ftpOutboundFlow(branch);
        this.flowContext.registration(flow).id(name +"o").register();
        myGateway.sendToFtp(new File("BEY/finalBEY.csv"));
    }

Консольный пробный вывод:

Когда в папке BEY нет файла, что логично.

2018-11-27 08:32:47.793  WARN 6420 --- [nio-8081-exec-9] o.s.i.ftp.session.FtpRemoteFileTemplate  : File BEY\finalBEY.csv does not exist

После удаления finalBEY.csv в папку, входящий поток просто читает то, что там есть в папке, и, как вы можете видеть, ничего не отправляется, а также я проверил сервер ftp и ничего там нет, обратите внимание, что еслифайл яЕсли я уже запустил приложение, оно уже отправлено, это уже проверено.

2018-11-27 08:33:17.985  INFO 6420 --- [ask-scheduler-2] f.s.s.configuration.FTIntegration        : flow=stockInboundFlowFromAFT, message=incoming file: BEY\finalBEY.csv
2018-11-27 08:33:17.985  INFO 6420 --- [ask-scheduler-2] f.s.s.configuration.FTIntegration        : flow=stockIntermediateStageChannel, message=rename file: BEY\finalBEY.csv

1 Ответ

0 голосов
/ 26 ноября 2018

Похоже, что вы опрашиваете каталог самостоятельно (и используете шлюз).Просто игнорируйте файлы, в которых файл final не существует.

Вы можете использовать опрашиваемый FileReadingMessageSource для опроса каталога и реализации пользовательского FileListFilter.

Пользовательский фильтр должен фильтроватьфайлы, в которых файл final еще не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...