2013-05-29 1 views
1

У меня есть таблица из более чем 1 миллиона клиентов. Информация каждого клиента часто обновляется, но обновляется только один раз в день. У меня весна пакетное задание, котороеКак выполнять параллельные задания в весенней партии без перекрывающихся данных читать

  • считывает клиента из таблицы клиентов (JdbcCursorItemReader)
  • обрабатывает информацию клиент (ItemProcessor)
  • запись в таблице клиентов (ItemWriter)

Я хочу запустить сразу 10 заданий, которые будут читаться из одной таблицы клиентов, не читая клиента дважды. Возможно ли это с помощью пакета Spring или это то, что мне нужно будет обрабатывать на уровне базы данных, используя таблицу crawlLog, как указано в этом сообщении?

How do I lock read/write to MySQL tables so that I can select and then insert without other programs reading/writing to the database?

Я знаю, что параметры могут быть переданы в работу. Я могу читать все идентификаторы клиентов и равномерно распределять идентификаторы клиентов на 10 рабочих мест. Но будет ли это правильным путем?

ответ

2

В Framework есть несколько способов указать, что вы хотите, это зависит от того, что вы получили. Чем проще один только добавить задачу исполнителя на шаг или потока:

<step id="copy"> 
    <tasklet task-executor="taskExecutor" throttle-limit="10"> 
    ... 
    </tasklet> 
</step> 

<beans:bean id="taskExecutor" 
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
    <property name="corePoolSize" value="10"/> 
    <property name="maxPoolSize" value="15"/> 
</beans:bean> 

Вы можете посмотреть на это и методы других в официальном Spring Batch documentation о масштабируемости.