У меня есть XML-файл, который мне нужно проанализировать с помощью Spring Batch, но я не уверен, как анализировать файлы в нескольких пакетах.
Пример того, как выглядит мой файл
<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
}
Я не уверен, выполнимо ли мое требование или нет, и если возможно, как мне написать код для моего 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;
}
Я ссылался на некоторые ссылки, но не понял, как подходить к проблеме. Пожалуйста, дайте мне какое-то решение для моей проблемы и некоторые ссылки для начала. Заранее спасибо