Последствия использования использования StepExecutionContext / JobExecutionContext для обмена Hashmap с большими значениями - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть требование, согласно которому я получаю значения в одном считывателе шага, используя операторы SQL, и выполняю тот же запрос в следующем считывателе.

Я не хочу делать еще один запрос, если данные уже извлечены в первом считывателе, и передать эту коллекцию (возможно, HashMap) на следующий шаг. Для этого я прошел по следующей ссылке на SO: Как мы можем обмениваться данными между различными этапами работы в Spring Batch?

Во многих комментариях упоминается, что 'данные должны быть короткими' .

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

Передав этот HashMap, я считаю, что он автоматически делает вывод, что ссылка на HashMap будет передана.

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

1 Ответ

0 голосов
/ 11 ноября 2018

Передача данных между этапами действительно осуществляется через контекст выполнения. Однако вы должны быть осторожны с размером данных, которые вы помещаете в контекст выполнения, так как он сохраняется между шагами.

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

Вы можете прочитать данные из базы данных только один раз и поместить их в кеш. Второй читатель может затем получить данные из кеша. Это будет быстрее, чем чтение данных из базы данных во второй раз.

Надеюсь, это поможет.

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