【问题标题】:Spring Batch configuration error in processor处理器中的 Spring Batch 配置错误
【发布时间】:2017-10-14 15:59:01
【问题描述】:

我想配置 Spring Batch 作业,但收到以下错误,如何解决?

错误:

读者:

import org.springframework.batch.item.ItemReader;

public class MoviesReader implements ItemReader<SearchResponseRO>, StepExecutionListener {

    @Override
    public SearchResponseRO read() throws Exception {
        return new SearchResponseRO();
    }
}

处理器:

import org.springframework.batch.item.ItemProcessor;

public class MoviesProcessor implements ItemProcessor<SearchResponseRO, Movie> {
    @Override
    public Movie process(SearchResponseRO searchResponseRO) throws Exception {
        return new Movie();
    }
}

为了解决问题,我需要进行哪些更改?

谢谢。

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

    您需要为chunk 操作指定一个类型。在您的情况下,这将是 &lt;SearchResponseRO, Movie&gt;。

    return stepBuilderFactory.get("downloadStep").<SearchResponseRO, Movie>chunk(10)
      .reader(reader)
      .processor(processor)
      .....
    

    没有类型,默认为&lt;Object, Object&gt;:

    stepBuilderFactory.get("test").chunk(10)
            .reader(new ItemReader<Object>() {
                @Override
                public Object read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
                    return null;
                }
            })
            .processor(new ItemProcessor<Object, Object>() {
                @Override
                public Object process(Object o) throws Exception {
                    return null;
                }
            })
            .writer(new ItemWriter<Object>() {
                @Override
                public void write(List<?> list) throws Exception {
    
                }
            })
            .build();
    

    如果您查看chunk 方法的定义,它接受int,但返回SimpleStepBuilder&lt;I, O&gt;。因为无法实际提供I 和O 的类型,所以您必须将它们转换为您想要的值。我相信.&lt;Type&gt;语法只是为了方便链调用时直接转换,所以下面两件事应该是一样的:

    public void castGenericReturnType() {
        System.out.println(this.<Integer>genericReturn(1));
        System.out.println((Integer) genericReturn(1));
    }
    
    public <I> I genericReturn(Object objectToCast) {
        return (I) objectToCast;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多