将@StepScope添加到ItemWriter会导致ClassCastException:$ Proxy57无法强制转换为ItemStream

时间:2016-08-07 14:53:50

标签: spring spring-batch

我在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)

感谢

0 个答案:

没有答案