处理器中的 Spring Batch 配置错误

Posted

技术标签:

【中文标题】处理器中的 Spring Batch 配置错误【英文标题】:Spring Batch configuration error in processor 【发布时间】: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();
    

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

谢谢。

【问题讨论】:

【参考方案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;。因为无法实际提供IO 的类型,所以您必须将它们转换为您想要的值。我相信.&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;

【讨论】:

以上是关于处理器中的 Spring Batch 配置错误的主要内容,如果未能解决你的问题,请参考以下文章

配置没有元表和数据源的 Spring Batch Job 用于在 Spring Boot 中存储真实信息

Spring Batch 异步处理器配置以获得最佳性能

Spring Batch 使用 Spring Boot - 从不重试写入错误

Spring Batch在大型企业中的最佳实践

Spring Batch在大型企业中的最佳实践

Spring Batch 在大型企业中的最佳实践