Этот вопрос задавался много раз на многих форумах. Но я не вижу ответа, который бы мне подошел. Я пытаюсь реализовать многопоточный шаг в моей весенней пакетной реализации.
У меня есть таблица хранения с 100k записей
Хочу обрабатывать ее в 10 потоках с интервалом фиксации 300 на поток - таким образом 3000 записей в любой момент времени.
Я определил исполнителя задачи и обратился к нему внутри шага, который я хочу сделать многопоточным
Моя идея в том, что сначала я получу размер пула потоков (10) и обновлю колонку thread_id с velue (может быть 1-10) для каждой из 100k записей. В данном случае 10 потоков и 100k записей, поэтому 10k записей будут иметь один id - я пытаюсь реализовать stagingsteplistener для этого.
написал читателя для этой таблицы staging. исполнитель задачи создаст 10 читателей и каждый читатель должен прочитать 300 различных записей и обработать их - Теперь как мне передать общий id между слушателем шага и читателем, чтобы каждый поток имел свой собственный набор записей для обработки.
На данный момент у меня только одна JVM. Поэтому я думаю сделать это в самом многопоточном шаге, а не думать о подходе на основе разделов.
Пожалуйста, помогите......
Я обратился к книге pro spring batch и создал слушателя staging step, который принимает идентификатор выполнения из конфигурации задания xml, используя параметры задания, как показано ниже
<beans:bean id="stagingStepListener"
class="com.apress.springbatch.statement.listener.StagingStepListener" scope="step">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="tableName" value="transaction"/>
<beans:property name="whereClause"
value="where jobId is null and processed is null"/>
<beans:property name="jobId" value="#{jobParameters[run.id]}"/>
</beans:bean>
Что я не могу найти, так это следующее? Откуда берется этот "run.id". Я не вижу этого ни в одном месте в книге. Я скопировал ту же реализацию в свой spring batch и когда я запускаю его, я вижу исключение, говорящее, что run.id не идентифицируется. Пожалуйста, помогите мне, как это сделать?