Фон/контекст
Я вижу почти бесчисленное количество примеров того, как обрабатывать несколько файлов с помощью 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();
}
Любой шаг выполняется независимо, но как только я добавляю один в качестве «следующего» шага, он выполняет только первый и генерирует ИНФО-сообщение «Шаг уже завершен или не перезапускается, поэтому никаких действий для выполнения» в выводе журнала - где мне уйти отсюда?