Я новичок в Spring Batch, и я начал использовать Spring Boot & Spring Batch official tutorial.Spring Batch: перейдите по именам файлов для чтения на следующий шаг
Проблема заключается в том, что после чтения в некоторых файлах с использованием весеннего пакета я хочу сохранить имена этих файлов и удалить их на следующем шаге.
Сначала я попробовал StepExecutionContext для передачи данных, но, судя по всему, данные, которые я хотел передать, были дорогими. Поэтому я попытался сохранить имя файлов, которые я прочитал, когда инициализировал свой Reader и читал этот файл на следующем шаге.
@Bean
public MultiResourceItemReader<Widget> widgetMultiReader() {
MultiResourceItemReader<Widget> reader = new MultiResourceItemReader<Widget>();
ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
try {
System.out.println("file:" + dataFileLocation + "Widget*.dat");
Resource[] resources = resolver.getResources("file:" + dataFileLocation + "Widget*.dat");
System.out.println("FOUND " + resources.length + " Widget.dat files");
StringBuilder sb = new StringBuilder();
for (int i=0; i<resources.length; i++) {
System.out.println(resources[i].getFilename());
sb.append(resources[i].getFilename());
if(i < resources.length-1){
sb.append("\n");
}
}
reader.setResources(resources);
reader.setDelegate(widgetReader());
File tempFolder = new File(dataFileLocation + Constants.TEMP_FOLDER_NAME);
tempFolder.mkdir();
File tempFile = new File(tempFolder.getAbsolutePath(), "read_in_files.tmp");
tempFile.createNewFile();
FileWriter fileWriter = new FileWriter(tempFile, false);
fileWriter.write(sb.toString());
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
return reader;
}
Это все работает очень хорошо, но получается, если я сделаю это, то код внутри компонента будет выполняться автоматически, даже если он не определен в шаге задания. Это, по-видимому, связано с инъекцией зависимостей (Spring boot spring.batch.job.enabled=false not able to recognize)
Так что я должен снова изменить свой метод, если вы, ребята, поможете мне здесь, пожалуйста?
Все, что я хочу сделать, это прочитать в наборе текстовых файлов, прочитать в нем данные, сохранить их в базе данных (это уже сделано). Затем удалите/архивируйте/перемещайте эти файлы на следующем шаге поэтому, если есть что-то вроде FlatFileParseException, вся работа остановится и не удалит файлы.
Пожалуйста, проверьте здесь http://stackoverflow.com/questions/23323535/spring-batch-delete-the-flatfile-from-directory-after-processed –
К сожалению, это одна из многих, которые я проверил, но я не может даже реализовать этот код, и даже если бы я это сделал, tbh Мне не нравится удалять файлы по методу чтения, но скорее сделайте это как отдельный шаг с помощью таска. – dK3
Если это так, в read() не удаляйте файл, а храните имя файла в контексте выполнения, продвигайте это свойство на следующий шаг и выполните удаление файлов –