【发布时间】:2021-10-22 00:56:03
【问题描述】:
我是 Spring Batch 的新手,我有一个应用程序,例如,可以读取航班的 xml 文件并将其保存到数据库中。整个过程已经开始工作,但由于某个用例,如果可能的话,我还需要访问 reader 对象 (ItemReader) 中的数据。 下面是阅读器方法。这不是特别关于这种方法,而是如前所述,它是关于 ItemReader。
@Bean
public StaxEventItemReader<Flight> flightReader() {
StaxEventItemReader<Flight> reader = new StaxEventItemReader<Obj>();
reader.setResource(ressource);
reader.setFragmentRootElementName("flight");
Map<String, String> aliases = new HashMap<String, String>();
aliases.put("flight", Flight.class);
XStreamMarshaller xStreamMarshaller = new XStreamMarshaller();
xStreamMarshaller.setAliases(aliases);
reader.setUnmarshaller(xStreamMarshaller);
return reader;
}
如何访问阅读器 (StaxEventItemReader) 对象中的飞行对象?
我实际上尝试使用 read() 方法 (Spring doc ItemReader),但我总是收到 NullPointerExceptions。
如果 read() 方法是正确的,如何才能正确访问 ItemReader 中的飞行对象? 如果没有,还有其他方法吗?
【问题讨论】:
-
阅读器在读取数据前必须先打开(看它如何实现
ItemStream)。当在面向块的步骤中使用此阅读器时,Spring Batch 会自动调用 open/update/close 方法,但如果您在步骤之外使用它(例如在单元测试中),则由您来调用这些方法来兑现ItemSteam合同。在您的情况下,这可能是导致 NPE 的原因。除此之外,第二个是 Henning 的答案。
标签: spring spring-boot spring-batch