![](/img/trans.png)
[英]How to effectively and correctly load sequential activities to Database using Spring batch?
[英]How to parse XML effectively using spring batch in case of mutiple tags
我有一個XML文件,我必須使用Spring批處理來解析,但是我不確定如何以多個批處理來解析文件。
我的文件外觀示例
<information>
<college>
<header info>
</college>
<student>
<student 1 info>
</student>
<student>
<student 2 info>
</student>
<student>
<student 3 info>
</student>
</information>
學生記錄樣本
<student>
<name>Tony Tester</name>
<rollNo>1</rollNo>
<enrollmentDate>2016-10-31</enrollmentDate>
<sampleTimeStamp>2016-11-07T05:50:45</sampleTimeStamp>
<salary>16.57</salary>
</student>
就我而言,學生可以有N條記錄,而N的價值確實可以是巨大的。 我的要求是解析XML文件並將所有學生的詳細信息放入數據庫,並且由於我使用的是Spring Batch,所以我不想一次加載整個XMl文件。 由於記錄數量眾多,我想分批讀取學生數據,比如說以300個塊為單位。我的Java POJO看起來像
Information.java
@XmlRootElement(name="information")
public class Information
{
@XmlElement(name="college")
private College college;
@XStreamAlias("student")
private List<Student> student;
... getter, setter and constructor
}
我不確定我的要求是否可行,如果可行,我應該如何在spring批處理配置中為itemReader編碼。 現在,我試圖只讀取沒有和大學標簽的學生數據,對於這種實現,我的讀者看起來像
ItemReader
@StepScope
@Bean(name="xmlReader")
public SynchronizedItemStreamReader<StudentDTO> reader()
{
StaxEventItemReader<StudentDTO> xmlFileReader = new StaxEventItemReader<>();
xmlFileReader.setResource(new ClassPathResource("students.xml"));
xmlFileReader.setFragmentRootElementName("student");
Map<String, Class<?>> aliases = new HashMap<>();
aliases.put("student", StudentDTO.class);
StudentConverter converter = new StudentConverter();
XStreamMarshaller xStreamMarshaller = new XStreamMarshaller();
xStreamMarshaller.setAliases(aliases);
xStreamMarshaller.setConverters(converter);
xStreamMarshaller.getXStream().addPermission(NoTypePermission.NONE);
xStreamMarshaller.getXStream().addPermission(NullPermission.NULL);
xStreamMarshaller.getXStream().addPermission(PrimitiveTypePermission.PRIMITIVES);
xStreamMarshaller.getXStream().allowTypeHierarchy(Collection.class);
xStreamMarshaller.getXStream().allowTypesByWildcard(new String[] {"com.example.demo.**"});
xmlFileReader.setUnmarshaller(xStreamMarshaller);
SynchronizedItemStreamReader< StudentDTO> synchronizedItemStreamReader = new SynchronizedItemStreamReader<>();
synchronizedItemStreamReader.setDelegate(xmlFileReader);
return synchronizedItemStreamReader;
}
我引用了一些鏈接,但對如何解決該問題並沒有任何重要的想法。 請給我一些解決我的問題的方法,並提供一些參考。 提前致謝
就我而言,學生可以有N條記錄,而N的價值確實可以是巨大的。 我的要求是解析XML文件並將所有學生的詳細信息放入數據庫,並且由於我使用的是Spring Batch,所以我不想一次加載整個XMl文件。 由於記錄很多,我想批量讀取學生數據,比如說300個數據塊。
這就是Spring Batch 面向塊的處理模型的工作方式。
您需要配置一個面向塊的步驟,其塊大小為300。SpringBatch一次只能讀取300個內存中的XML項(而不是整個輸入文件),在讀取下一個塊之前先進行處理/寫入。
您可以在XML Input Output示例中使用StaxEventItemReader
找到一個示例。 相關部分在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.