Как обрабатывать несколько разных файлов по-разному, используя Spring Batch - PullRequest
0 голосов
/ 01 мая 2019

Фон / Контекст

Я вижу почти бесчисленное множество примеров обработки нескольких файлов с помощью Spring Batch, но у каждого из них есть один объект, в который обрабатываются все файлы.Итак, многие файлы, содержащие совместимые данные, которые все обрабатываются в одну цель назначения, например, таблицу базы данных.

Я хочу построить процесс импорта, который будет принимать десять различных файлов и отображать ихдо десяти разных таблиц назначения в одной базе данных / схеме.Имена файлов также будут слегка изменяться предсказуемо / кодируемым образом каждый день, но я думаю, что смогу справиться с этим.Я думал, что Spring может сделать это (отображение данных многие-ко-многим), но это последнее, чего я не нахожу, КАК делать.Декларативная структура Spring отлично подходит для некоторых вещей, но я, честно говоря, не уверен, как настроить множественные отображения, и, поскольку в действительности нет процедурной части приложения, о которой можно говорить, я не могу использовать любую форму итерации.,Я мог бы просто сделать отдельные jar-файлы для каждого файла и написать сценарий итерации на консоли, но это также усложняет ведение журнала и создание отчетов ... и, честно говоря, это звучит глупо

Вопрос

Как мне сказатьSpring Batch обрабатывает каждый из десяти различных файлов десятью различными способами и отображает их данные в десять разных таблиц в одной базе данных?

Пример:

  • Файл Data_20190501_ABC_000.txt содержит4 столбца данных, разделенных тильдой, и должны быть сопоставлены с таблицей ABC_data с 6 столбцами (два являются метаданными)
  • Файл Data_20190501_DEF_000.txt содержит 12 столбцов данных, разделенных тильдой, и должен быть сопоставлен с таблицейDEF_data с 14 столбцами (два являются метаданными)
  • Файл Data_20190501_GHI_000.txt содержит 10 столбцов данных, разделенных тильдой, и его необходимо сопоставить с таблицей GHI_data с 12 столбцами (два являются метаданными)
  • и т. Д. ... для десяти различных файлов и таблиц

Я могу справиться с разделителями тильды, Я ДУМАЮ, что я могу обработать даты в именах файлов программно, и один из нихПоля могут быть обработаны в триггере БД.другое поле метаданных должно быть именем файла, но это, безусловно, может быть другой вопрос.

ОБНОВЛЕНИЕ

В соответствии с тем, что, как мне кажется, предложил Махмуд Бен Хассин, я создал отдельного читателя, картографа,и пишущий для каждой пары файл / таблица, и попытался добавить их с помощью парадигмы start (step1), next (step2), build () в следующем формате, как показано на примерах в Настройка и запуск задания из документов Spring:

@Autowired
private JobBuilderFactory jobs;

@Bean
public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
    return jobs.get("myJob").start(step1).next(step2).build();
}

Любой шаг выполняется независимо, но как только я добавляю его в качестве «следующего» шага, он выполняет только первый и генерирует «Шаг уже завершен или не перезапускается, поэтомунет действия для выполнения "сообщения INFO в выводе журнала - куда мне идти отсюда?

1 Ответ

1 голос
/ 01 мая 2019

Шаг Spring Batch, ориентированный на куски, может обрабатывать только один тип элементов за раз.Я бы использовал работу с разными шагами, ориентированными на чанки.Эти шаги могут выполняться параллельно, поскольку между входными файлами нет отношения / порядка.

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

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

...