Весеннее пакетное задание является потокобезопасным? - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно распараллелить один шаг пакетного пружинного задания.Перед параллелизацией шага запускаются тасклеты, которые вносят некоторые результаты в параметры задания.Результаты, полученные с помощью тасклетов, необходимы для выполнения Partitioner и элементов шага, который должен быть распараллелен.Возникает сомнение, что я действительно не могу решить.Поскольку одно и то же задание может выполняться одновременно несколько раз с разными начальными параметрами, безопасны ли тасклеты и элементы шагов для многопоточной обработки?

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Нет, тасклеты и компоненты шага, ориентированные на фрагменты, не являются поточно-ориентированными.Если они совместно используются несколькими экземплярами / выполнениями заданий, выполняемыми одновременно, вам необходимо сделать их поточно-ориентированными.

Этого можно добиться, используя JobScope d шагов и StepScope d читателей / писателей.Вы также можете использовать SynchronizedItemStreamReader и ( предстоящий ) SynchronizedItemStreamWriter, чтобы сделать читателей и авторов потокобезопасными.Все читатели и авторы статей, предоставленные Spring Batch, упоминают о своей безопасности потоков в Javadoc.

0 голосов
/ 17 мая 2019

Вы не хотите запускать несколько экземпляров одного и того же задания.Было бы лучше запустить несколько задач или процессов за один шаг и / или задание.Возможно, вы захотите найти разделение заданий и / или удаленную блокировку, чтобы выполнить параллельную обработку.

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

https://docs.spring.io/spring-batch/2.1.x/cases/parallel.html

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