春季批处理:等待ProcessBuilder作业完成

时间:2018-06-29 02:05:57

标签: spring spring-batch

我有一个Spring Batch作业,用于扫描目录中的视频文件,并为这些视频创建缩略图(这是通过使用ProcessBuilder启动Docker容器来完成的)。

我遇到的问题是,Spring没有等到5(chunkSize)完成才开始更多。这导致启动了数百个Docker容器。

对Spring Batch非常绿色,我认为我刚配置错了吗?

我的豆子:

@Bean(name = "importVideosJob")
public Job importVideosJob(JobDurationListener listener, Step step) {
    return jobBuilderFactory.get("readFiles")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(step)
            .end()
            .build();
}

@Bean
public Step step() {
    return stepBuilderFactory.get("step").<File, Video>chunk(5)
            .reader(directoryItemReader())
            .processor(processor())
            .build();
}


@Bean
public VideoProcessor processor() {
    return new VideoProcessor(thumbnailService, videoRepository, fileMetaRepository);
}

@Bean
public DirectoryItemReader directoryItemReader() {
    log.info("Scanning {}", directoryPath);

    return new DirectoryItemReader("file:" + directoryPath);
}

其他方法没有对线程做任何事情,所以我认为这不是问题。

在VideoProcessor内部,我正在使用它来创建缩略图

private int executeScript(String command) {
    try {
        final ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", command);
        processBuilder.redirectErrorStream(true);

        log.info("executing: " + processBuilder.command().toString());

        final Process process = processBuilder.start();
        final InputStream inputStream = process.getInputStream();
        final InputStream errorStream = process.getErrorStream();

        readStream(inputStream);
        readStream(errorStream);

        return process.waitFor();

    } catch (Exception e) {
        log.error(e.getMessage());
    }

    return -1;
}

我的Spring Batch设置是否有问题?

0 个答案:

没有答案