Spring Batch Multi Threading - Как сделать так, чтобы каждый поток читал уникальные записи?

Этот вопрос задавался много раз на многих форумах. Но я не вижу ответа, который бы мне подошел. Я пытаюсь реализовать многопоточный шаг в моей весенней пакетной реализации.

  1. У меня есть таблица хранения с 100k записей

  2. Хочу обрабатывать ее в 10 потоках с интервалом фиксации 300 на поток - таким образом 3000 записей в любой момент времени.

  3. Я определил исполнителя задачи и обратился к нему внутри шага, который я хочу сделать многопоточным

  4. Моя идея в том, что сначала я получу размер пула потоков (10) и обновлю колонку thread_id с velue (может быть 1-10) для каждой из 100k записей. В данном случае 10 потоков и 100k записей, поэтому 10k записей будут иметь один id - я пытаюсь реализовать stagingsteplistener для этого.

  5. написал читателя для этой таблицы 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 не идентифицируется. Пожалуйста, помогите мне, как это сделать?

5
задан juniorbansal 31 January 2012 в 22:06
поделиться