Java JAXB - Написание файлов XML с логикой перезапуска
Я создаю очень большой XML-файл (700 Мб +), который обрабатывает большие объемы данных в пакетном режиме. Программа служит интерфейсом между чрезвычайно большой базой данных Sybase и приложением. В настоящее время у меня есть схема xsd, связанная с классами. Мне нужен способ написать XML с учетом логики перезапуска.
То есть возможность узнать, где я остановился. Или, другими словами, в случае сбоя программы мне нужно иметь возможность увидеть, что в последний раз было записано в файл XML, чтобы он мог определить, где я остановился. Вот пример.
<root>
<WorkSet>
<Work>
<Customer>
<Work>
<Customer>
<WorkSet>
<Work>
.....
<root>
Скажем, программа не работает после записи узла записи "работа" или "рабочий набор". Есть ли способ узнать, где я остановился? Я пытаюсь избежать чтения XML-файла обратно в память из-за размера сдвига XML-файла (скажем, он заканчивает 500 МБ XML и терпит неудачу).
Спасибо за помощь.
2 ответа
Если вы можете разделить ваши данные на независимые элементы WorkSet, вы можете записывать их по одному за раз в режиме фрагментирования JAXB (когда JAXB не записывает заголовки). Позже просто объедините файлы и добавьте отсутствующее объявление XML, открывая закрывающие закрывающие теги.
Вполне возможно, что вы должны изменить сгенерированные классы для этого. Я имею в виду добавление @XmlRootElement
в Java-класс WorkSet. Если один WorkSet по-прежнему велик для одного шага, вы можете сделать это и с помощью Work, но вам нужно как-то сгенерировать недостающие теги.
Я не думаю, что JAXB - подходящий инструмент для этой работы, но...
Вы можете написать собственную реализацию Marshaller, которая отслеживает, какие объекты были упорядочены, и использовать режим фрагмента для записи отдельных объектов.