Можно ли выполнить какую-то проверку в Spring интеграции перед запуском пакетного процесса Spring?

Интеграция Spring - это опрос файлов с последующим вызовом пакетного процесса Spring. Мой вопрос в том, можно ли выполнить некоторую проверку полученного сообщения

Созданное сообщение: [GenericMessage [payload = C: \ Prerna \ Sample \ hello.xlsx, headers = {id = b29e72bb-f8fe-ba96-36ec-497b3890a944, timestamp = 1516903490937}]]

Я хочу проверить, находится ли полученный файл в правильном формате, и выполнить некоторые проверки базы данных, инициировать электронное письмо, прежде чем вызывать весенний пакетный процесс. Пожалуйста, дайте мне знать, если это возможно. Если возможно, то, пожалуйста, посоветуйте, как вызвать часть проверки в моем потоке интеграционных потоков. Стоит ли это делать ручкой (активатором услуги)? Пожалуйста, посоветуйте, любой фрагмент кода поможет.

Ниже приведен код: -

@Configuration

class FilePollingIntegrationFlow {

    @Autowired
    private ApplicationContext applicationContext;


    @Bean
    public IntegrationFlow inboundFileIntegration(@Value("${inbound.file.poller.fixed.delay}") long period,
                                                  @Value("${inbound.file.poller.max.messages.per.poll}") int maxMessagesPerPoll,
                                                  TaskExecutor taskExecutor,
                                                  MessageSource<File> fileReadingMessageSource,
                                                 JobLaunchingGateway jobLaunchingGateway) {



        return IntegrationFlows.from(fileReadingMessageSource,
                c -> c.poller(Pollers.fixedDelay(period)
                        .taskExecutor(taskExecutor)
                        .maxMessagesPerPoll(maxMessagesPerPoll)))
                         .channel(ApplicationConfiguration.INBOUND_CHANNEL)                   
.transform(fileMessageToJobRequest())
.handle(jobLaunchingGateway())
 .channel(MessageChannels.queue())
                 .get();
    }

    @Bean
    public FileMessageToJobRequest fileMessageToJobRequest() {
        FileMessageToJobRequest fileMessageToJobRequest = new FileMessageToJobRequest();
        fileMessageToJobRequest.setFileParameterName("input.file.name");
      //  fileMessageToJobRequest.setJob(personJob());
        System.out.println("FilePollingIntegrationFlow::fileMessageToJobRequest::::Job launched successfully!!!");
        return fileMessageToJobRequest;
    }

    @Bean
    public JobLaunchingGateway jobLaunchingGateway() {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
      //  simpleJobLauncher.setJobRepository(jobRepository);
        simpleJobLauncher.setTaskExecutor(new SyncTaskExecutor());
        JobLaunchingGateway jobLaunchingGateway = new JobLaunchingGateway(simpleJobLauncher);
        System.out.println("FilePollingIntegrationFlow::jobLaunchingGateway::::Job launched successfully!!!");
        return jobLaunchingGateway;
    }

person Prerna    schedule 26.01.2018    source источник


Ответы (1)


Добавьте сервисный метод к какому-нибудь bean ...

public File validate(File file) {
    // validate
    return file;
}

затем добавьте .handle("validateBean", "validate") в поток перед трансформатором.

Вы можете вызвать исключение или вернуть null, если проверка не удалась.

System.out.println("FilePollingIntegrationFlow::fileMessageToJobRequest::::Job launched successfully!!!");

Это не в потоке; эти сообщения будут отправлены только один раз (во время создания @Bean).

Вам нужно добавить в поток несколько похожих сервисов (например, .log), чтобы вести журнал из фактического потока.

person Gary Russell    schedule 26.01.2018