Когда следует разблокировать файл после использования NioLocker для его блокировки в вашем опроснике FileReadingMessageSource?

#java #spring #spring-integration #spring-batch

#java #spring #spring-интеграция #spring-batch

Вопрос:

Я использую общий исходный код для настройки опросника каталогов в Spring Integration. Опросник использует NioLocker для блокировки и файла, и за JavaDocs я отвечаю за разблокировку файла с помощью NioFileLocker.unlock (file).

Мои основные вопросы: когда это должно произойти и, конечно, как?

Моя первоначальная мысль — после того, как мой прослушиватель заданий переместит файл в новый каталог. В настоящее время я знаю только имя пути к файлу и не имею дескриптора для самого файла.

Код опросника каталогов:

     @Bean
    @InboundChannelAdapter(value = "claimInputChannel", poller = @Poller(fixedDelay = "5000"))
    public FileReadingMessageSource claimPollingFileSource(){
        logger.debug("Setting up inbound channel adapter ===> claimInputChannel");

        CompositeFileListFilter<File> compositeFileListFilter= new CompositeFileListFilter<File>();
        compositeFileListFilter.addFilter(new RegexPatternFileListFilter("(?i).*_CLAIM_.*[.]txt"));
        compositeFileListFilter.addFilter(lastModifiedFilter());
        compositeFileListFilter.addFilter(new IgnoreHiddenFileListFilter());
        compositeFileListFilter.addFilter(new AcceptOnceFileListFilter<File>());

        FileReadingMessageSource pollDirectory = new FileReadingMessageSource();

        pollDirectory.setDirectory(new File(pollingDirectory));
        pollDirectory.setAutoCreateDirectory(false); 
        pollDirectory.setFilter(compositeFileListFilter);
        pollDirectory.setLocker(new NioFileLocker());           
        return pollDirectory;
    }
  

Код AfterJob в прослушивателе:

 @Override
public void afterJob(JobExecution jobExecution) {
    logger.debug("In afterJob routine");

    if (jobExecution.getStatus() == BatchStatus.COMPLETED) {    
        // check if directory exists
        File dir = new File(processedDirectory);
        if (dir.exists()) {
            Path sourcePath = Paths.get(jobExecution.getJobParameters().getString("fileName"));
                String target = processedDirectory   "/"   sourcePath.getFileName();
            logger.debug("Moving processed file "   sourcePath.toString()   " to "   target);

            try {
                Files.move(sourcePath, Paths.get(target), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                logger.error("Something went wrong in moving file to processed directory.");
                e.printStackTrace();
            }
        } else {
            logger.error("The "   processedDirectory   " does not exist.");
        }

    } else {
        logger.debug("Batch job is not yet complete.");
    }

}