我有一个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设置是否有问题?