Spring Batch - Копирование файла из удаленного местоположения

Я новичок в весне партии. Мне нужно добиться следующего: Шаг 1: Скопировать файл из удаленного расположения в локальный каталог. Шаг 2: Обработка каждой строки файла. Шаг 3: Сохраните обработанную строку в базе данных.

Я уверен в последних двух шагах, но как мне сделать первый шаг?

Спасибо за вашу помощь.

1 ответ

Вы можете написать тасклет, чтобы добиться этого, этот тасклет будет в отдельном шаге

<step id="movingFile" next="step2">
        <tasklet ref="voterImportFileMovingTasklet" />
        <listeners>
            <listener ref="stepLevelListener" />
        </listeners>
    </step>
<step id="step2" >
            <chunk reader="FileReader" processor="ItemProcessor" writer="ItemWriter" commit-interval="300"
                skip-limit="1000">
                <skippable-exception-classes>
                    <include class="java.lang.Exception" />
                    </skippable-exception-classes>
                <listeners>
                    <listener ref="voterImportListener" />
                </listeners>
            </chunk>
    </step>

Тасклет будет

public class FileMovingTasklet implements Tasklet, InitializingBean {
private Resource sourceDirectory;
private Resource targetDirectory;



private static final Log LOG = LogFactory.getLog(FileMovingTasklet.class);

public Resource getSourceDirectory() {
    return sourceDirectory;
}

public void setSourceDirectory(Resource sourceDirectory) {
    this.sourceDirectory = sourceDirectory;
}

public Resource getTargetDirectory() {
    return targetDirectory;
}

public void setTargetDirectory(Resource targetDirectory) {
    this.targetDirectory = targetDirectory;
}


@Override
public void afterPropertiesSet() throws Exception {
    Assert.notNull(sourceDirectory, "Source directory must be set");
    Assert.notNull(targetDirectory, "Target directory must be set");
}

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

    InputStream inStream = null;
    OutputStream outStream = null;
    File[] files;
    File dir = sourceDirectory.getFile();
    Assert.state(dir.isDirectory());
        files = dir.listFiles();
    File bfile = null;
    for (int i = 0; i < files.length; i++) {


            bfile = new File(targetDirectory.getURL().getPath() + File.separator + files[i].getName());

        inStream = new FileInputStream(files[i]);
        outStream = new FileOutputStream(bfile);

        byte[] buffer = new byte[1024];

        int length;
        // copy the file content in bytes
        while ((length = inStream.read(buffer)) > 0) {

            outStream.write(buffer, 0, length);

        }

        inStream.close();
        outStream.close();
    }
    return RepeatStatus.FINISHED;
}
Другие вопросы по тегам