как читать сложные данные из нескольких связанных таблиц базы данных в весеннем пакете

Я намерен реализовать пакет для чтения данных из различных таблиц БД для заполнения сложного домена ниже, затем выполнить расчет в процессоре и загрузить данные в БД через средство записи.

public class A{

  private String id;
  private String name;
  private ArrayList list1;
  private ArrayList list2;

  ......
}

Теперь я застрял на дизайне читалки. Идея состоит в том, чтобы запросить таблицу БД, чтобы получить список идентификаторов, а затем запросить другие поля, включая список1 и список 2, на основе каждого идентификатора. Кажется, существующий ридер не может выполнить это требование, нужно ли мне создавать собственный ридер для достижения цели? Я думаю, что я бы использовал подход кусков, но понятия не имею, как его реализовать.

Пример кода очень ценится.


person kgb    schedule 09.08.2018    source источник


Ответы (1)


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

Это распространенный шаблон, и вы можете найти более подробную информацию о нем в разделе common batch patterns документации здесь: https://docs.spring.io/spring-batch/4.0.x/reference/html/common-patterns.html#drivingQueryBasedItemReaders

person Mahmoud Ben Hassine    schedule 09.08.2018
comment
Шаблон управляющего запроса не всегда будет работать в сценарии, где у вас есть огромное количество наборов данных для поиска, проблем с производительностью и т. д. В таком случае, как мы можем действовать? - person Jeff Cook; 14.12.2020
comment
Да, я обычно упоминаю об этом в ответе, например, здесь: stackoverflow.com/a/63987697/5019386. Один из способов решить эту проблему для больших наборов данных — разделить входные данные и использовать несколько рабочих процессов параллельно. - person Mahmoud Ben Hassine; 16.12.2020