Spring Integration - Files.inboundAdapter, Ошибка сервера. Открыто слишком много файлов. - PullRequest
0 голосов
/ 22 ноября 2018

Привет, я новичок в интеграции с Spring, и у меня есть приведенный ниже поток кода, который читает / сканирует файлы в каталоге, я сталкиваюсь с ошибкой сервера при открытии слишком большого количества файлов.Поллер каждый раз открывает новый файл и не закрывает предыдущие?

Спасибо за помощь.

@Bean
public IntegrationFlow jsonFileRefreshFlow(){
return IntegrationFlows.from(Files.inboundAdapter(new File(filePath))
    .autoCreateDirectory(true)
    .patternFilter("*.json")
    .watchEvents(FileReadingMessageSource.WatchEventType.CREATE,
      FileReadingMessageSource.WatchEventType.MODIFY)
      .useWatchService(true)
      .scanEachPoll(true)
      .preventDuplicates(false)
    e -> e.poller(Pollers.fixedDelay(1000, TimeUnit.MILLISECONDS)
    .maxMessagesPerPoll(Integer.MAX_VALUE)))
  .<File, Resource>transform(p -> new FileSystemResource(p))
  .<Resource>handle((p,h) -> {
    try{
      // process payload
    }catch (IOException ioEx){
      log.error("Error refreshing json specs {}", ioEx);
    }finally {
      try {
        p.getInputStream().close();
      } catch (IOException e) {
        log.error("error closing stream");
      }
    }
    return null;
  }).get();

1 Ответ

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

Фреймворк не открывает файл;по-видимому, ваш .handle() метод делает;поэтому он отвечает за его закрытие.

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