Пул объектов уровня задания, доступный в компонентах секционированного шага

У меня есть работа с двумя шагами, но эти два шага являются секционированными шагами.

Шаги в основном являются Lucene индексирования(первый шаг) и Lucene поиска Шаг (второй шаг), и на данный момент я создавал Lucene reader, Lucene searcher и Lucene writer объектов в шаге Partitionerи передачи соответствующих компонентов шага с помощью @Valueаннотаций.

Теперь есть изменение требования, и иногда мне нужен объект writer из другого потока ( другого секционированного шага ) в текущем потоке ( текущий секционированный шаг), но Lucene не позволяет создавать несколько объектов writer для одного каталога, поэтому мне нужно поделиться этими объектами через секционированные шаги.

Таким образом, решение состоит в том, чтобы создать уровень заданияMap, который содержит все эти объекты, и я получаю эти объекты из map всякий раз, когда мне нужно в компоненте шага ( читатель, процессор или писатель), то, наконец, я размещаю/закрываю все эти объекты в конце задания.

Как этого достичь? т. е. Можно ли поместить эти объекты jobExecution.getExecutionContext()в JobExecutionListenerSupportbeforeJob(JobExecution jobExecution)метод in?

Как получить конкретные объекты с этой карты в reader, processor & writer? Я бы не знал это во время настройки, но во время выполнения.

Наконец, я закрою эти объекты в JobExecutionListenerSupportafterJob(JobExecution jobExecution)методе in.

Я использую аннотацию на основе конфигурации Spring batch и Lucene 6.0.

Пожалуйста предложите.

1 ответ

  1. Предложенный мной подход заключается в том, чтобы поместить эти объекты ExecutionContext - jobExecution.getExecutionContext()в методbeforeJob(JobExecution jobExecution), а затем закрыть эти ресурсы в afterJob(JobExecution jobExecution)работе хорошо для меня. Я не вижу никаких проблем.

    Я просто впрыскиваю — @Value("#{jobExecutionContext}")в компонентах где мне нужно оно.