我正在尝试在 Spring 图像批处理系统中发送巨大的多部分文件。 我将 Multipartfile[] 发送到 Controller,然后发送到 Service。在服务中,我只是将文件设置在静态多部分文件数组中。然后启动作业启动器。 在 Reader 中,我只是访问静态数组并读取数据。
但我的问题是我不想那样使用静态变量,因为我必须以 GB 为单位发送大量数据。那么我如何从我的服务中调用读取方法,以便我可以在参数中发送数据。
这是我的服务:
@Service
public class ImageService {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
public static MultipartFile[] files = null;
public void imageFiles(MultipartFile[] files) {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("startAt", System.currentTimeMillis()).toJobParameters();
try {
ImageService.files = files;
jobLauncher.run(job, jobParameters);
} catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException |
JobParametersInvalidException e) {
e.printStackTrace();
}
}
}
这是我的读者类:
@Service
public class MyCustomReader implements ItemReader<MultipartFile> {
private int index = 0;
@Override
public MultipartFile read() throws Exception {
MultipartFile[] files = ImageService.files;
if (index >= files.length)
return null;
return files[index++];
}
}
这是我的配置类:
@Configuration
@EnableBatchProcessing
@AllArgsConstructor
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private MyCustomReader myCustomReader;
@Autowired
private MyCustomProcessor myCustomProcessor;
@Autowired
private MyCustomWriter myCustomWriter;
@Bean
public Step step() {
return stepBuilderFactory.get("MyStep").<MultipartFile, MultipartFile>chunk(3)
.reader(myCustomReader)
.processor(myCustomProcessor)
.writer(myCustomWriter)
.build();
}
@Bean
public Job runBatchJob() {
return jobBuilderFactory.get("batch")
.flow(step()).end().build();
}
}
试了很多方法都解决不了