MultiResourceItemReader - только для чтения c файлов - PullRequest
0 голосов
/ 07 августа 2020

У меня есть задача, которую мне нужно загрузить в базу данных только новых CSV-файлов. если файл уже был загружен в базу данных, этот файл следует игнорировать. В настоящее время я загружаю все файлы CSV независимо от того.

// daily/*.csv
@Value("${dailyExportDirPath}")
private Resource[] inputResources;

@Bean
public MultiResourceItemReader<DailyExport> multiResourceItemReader(FieldSetMapper<DailyExport> testClassRowMapper) {

    MultiResourceItemReader<DailyExport> multiResourceItemReader = new MultiResourceItemReader<>();
    multiResourceItemReader.setName("dailyExportMultiReader");
    multiResourceItemReader.setDelegate(reader(testClassRowMapper));
    multiResourceItemReader.setStrict(true);
    multiResourceItemReader.setResources(inputResources);
    return multiResourceItemReader;
}

Я думал создать таблицу, которая будет содержать все файлы, которые уже загружены. Таким образом, вместо того, чтобы инициировать массив ресурсов со всеми существующими CSV из каталога, задание создаст массив ресурсов, который будет содержать только новые отчеты.

все отчеты в каталоге - отчеты в базе данных = новые отчеты, которые необходимо загрузить.

Как мне оптимизировать массив ресурсов, чтобы они содержали только соответствующие файлы, то есть новые?

Спасибо

1 Ответ

0 голосов
/ 07 августа 2020

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

...