如何使用 Spring 批处理处理对象列表
Posted
技术标签:
【中文标题】如何使用 Spring 批处理处理对象列表【英文标题】:How to process a List of Objects Using Spring batch 【发布时间】:2020-07-13 03:13:56 【问题描述】:我正在尝试读取 JSON 文件并读取其值并将其存储在 List<Data>
对象中。
我正在从我的 ItemReader 类中调用 List 并对其进行处理以将其写入数据库。
我的阅读器如下所示:
public class JsonItemReaderFromULProspector implements ItemReader<Data>
// static String jsonFilePath = Directory.JSON_FILE_PATH;
private int nextULPIndex;
public JsonItemReaderFromULProspector()
initialize();
private List<Data> finalULPData;
private void initialize()
List<Data> ulpData=ReadJSONFromULP.getJsonObject();
for(Data data:ulpData)
finalULPData=Collections.unmodifiableList(Arrays.asList(data));
nextULPIndex=0;
@Override
public Data read()throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException
Data nextULPData=null;
if (nextULPIndex < finalULPData.size())
nextULPData = finalULPData.get(nextULPIndex);
nextULPIndex++;
return nextULPData;
而我的处理器是一个普通的处理器,它以<Data,ULProspector>
作为输入和输出。
当我尝试将其写入数据库时。我只能将一条记录写入数据库,然后它就会退出。
【问题讨论】:
在这种情况下,您的阅读器只返回一个元素。检查您的read
方法并确保它在返回 null
之前返回多个元素。
【参考方案1】:
而且我相信只有一条您能够将其写入数据库的记录是 JSON 文件中的最后一条记录。
尝试更改这部分代码
for(Data data:ulpData)
finalULPData=Collections.unmodifiableList(Arrays.asList(data));
nextULPIndex=0;
到
finalULPData=Collections.unmodifiableList(ulpData);
nextULPIndex=0;
【讨论】:
出现错误类型不匹配:无法从 List> 转换为 List 是的,你是对的,它是 JSON 中保存在数据库中的最后一条记录。我想保存从第一个开始的所有记录 嗨 Hemant.. 在用建议的代码替换我的代码后,我得到了从 ItemReader 到 Item Processor 的所有记录,但在处理器中出现错误,如下所示 java.lang.NullPointerException: null at com.dksh。 spcrt.processor.ULProspectorDataProcessor.process(ULProspectorDataProcessor.java) ~[classes/:na] at com.dksh.spcrt.processor.ULProspectorDataProcessor.process(ULProspectorDataProcessor.java) ~[classes/:na] at org.springframework.batch。 core.step.item.SimpleChunkProcessor.doProcess(SimpleChunkProcessor.java:134) 建议对 ULProspectorDataProcessor.java 中的 NullPointerException 异常进行调试,或者您可以使用处理器类的代码编辑您的问题。以上是关于如何使用 Spring 批处理处理对象列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用需要 2 个参数且其中只有一个参数存储在列表中的查询进行批处理更新
Spring批处理数据读取器在读取项目集合结束时返回额外的空对象?