处理器中的 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
操作指定一个类型。在您的情况下,这将是 <SearchResponseRO, Movie>
。
return stepBuilderFactory.get("downloadStep").<SearchResponseRO, Movie>chunk(10)
.reader(reader)
.processor(processor)
.....
没有类型,默认为<Object, Object>
:
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<I, O>
。因为无法实际提供I
和O
的类型,所以您必须将它们转换为您想要的值。我相信.<Type>
语法只是为了方便链调用时直接转换,所以下面两件事应该是一样的:
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 中存储真实信息