我在Spring批处理作业中有一个步骤,定义如此。请注意,我只包括我认为相关的内容。
@Bean
public Step readStgDbAndExportMasterListStep(
@Qualifier("queryStagingDbReader") ItemReader<MasterList> queryStagingDbReader,
@Qualifier("masterListOutputProcessor") ItemProcessor<MasterList,MasterList> masterListOutputProcessor,
@Qualifier("masterListFileWriter") ItemWriter<MasterList> masterListFileWriter,
@Qualifier("divisionMasterListFileWriter") ItemWriter<MasterList> divisionMasterListFileWriter,
@Qualifier("stepListener") CustomStepExecutionListener stepListener) {
return commonJobConfig.stepBuilderFactory
.get("readStgDbAndExportMasterListStep")
.<MasterList,MasterList>chunk(commonJobConfig.chunkSize)
.reader(queryStagingDbReader)
.processor(masterListOutputProcessor)
.writer(masterListFileWriter)
.stream((ItemStream) divisionMasterListFileWriter)
.listener(stepListener)
.build();
}
其中divisionMasterListFileWriter的定义如下。
@Bean
public ItemWriter<MasterList> divisionMasterListFileWriter() {
FlatFileItemWriter<MasterList> writer = new FlatFileItemWriter<>();
writer.setResource(new FileSystemResource(new File(commonJobConfig.outDir, "45_masterList" + "" + ".csv")));
writer.setHeaderCallback(masterListFlatFileHeaderCallback());
writer.setLineAggregator(masterListFormatterLineAggregator());
return writer;
}
我现在需要将divisionMasterListFileWriter更改为@StepScope,因为我需要从stepExecutionContext访问某些内容。
问题是我将@stepScope添加到divisionMasterListFileWriter后,当我尝试运行时,我开始得到ClassCastException ...
Error creating bean with name 'readStgDbAndExportMasterListStep' defined in ExportMasterListCsvJobConfig: java.lang.ClassCastException: com.sun.proxy.$Proxy57 cannot be cast to org.springframework.batch.item.ItemStream
似乎将@stepScope添加到编写器中会破坏步骤定义的.stream部分。
有人可以帮助我解决这个问题吗?
我不确定,但这可能与https://jira.spring.io/browse/BATCH-2023有关吗?在找到jira链接后我也尝试了以下内容,但它没有改变任何内容。
@Scope(value = "step", proxyMode = ScopedProxyMode.TARGET_CLASS)
感谢