Если вы используете NFS, установите для свойства sharedFileSystem
значение true
:
BatchSource<SalesRecordLine> source = Sources.filesBuilder(sourceDir)
.glob("*.csv")
.sharedFileSystem(true)
.build(path -> Files.lines(path).skip(1).map(SalesRecordLine::parse));
Из метода javado c:
Устанавливает, если файлы находятся в общем хранилище, видимом для всех участников. Значением по умолчанию является false. Если sharedFileSystem имеет значение true, Jet будет считать, что все участники видят одинаковые файлы. Они разделят работу так, чтобы каждый участник прочитал часть файлов. Если sharedFileSystem имеет значение false, каждый участник будет читать все файлы в каталоге, предполагая, что они являются локальными.
Для источника пакета Jet предполагает, что файлы не изменяются во время чтения. Если это так, результат не определен.
Если вы хотите отслеживать файлы по мере их записи, используйте FileSourceBuilder.buildWatcher()
вместо build()
- это создаст потоковое задание. Но наблюдатель обрабатывает только строки, добавленные с момента начала работы. Опять же, если файлы изменены каким-либо другим способом, кроме добавления в конце, результат не определен. Например, многие текстовые редакторы удаляют и записывают весь файл, даже если вы просто добавили строку в конце - для тестирования проще всего использовать
echo "text" >> your_file"