У меня есть следующая проблема: у меня есть файл, в котором каждая строка приводит к записи 1 или более элементов в базу данных. Мне нужно выполнить поиск из другой системы, чтобы узнать, сколько элементов нужно записать. Каждый из элементов, полученных из одной строки, должен быть преобразован с использованием цепочки обработчиков элементов и, наконец, записан в несколько таблиц в БД.
Поскольку каждый элемент должен записывать в несколько таблиц, каждый из них должен быть в своей собственной транзакции. Из-за этого я не могу просто иметь ItemProcessor<Foo, List<Bar>>
, который справится с этим. В этом случае — даже с commit-interval
равным 1 — я бы получил несколько элементов в одной транзакции.
Я видел это уже вопрос о переполнении стека. Принятый ответ не помогает мне из-за проблемы с транзакцией. Другой ответ об использовании сплиттера Spring Integration звучит интригующе. Тем не менее, это не дает тонны деталей. Как определить вывод считывателя как вход канала? Как мне определить выходной канал, который идет к моему писателю? Как я мог по-прежнему запускать цепочку обработчиков элементов для каждого вновь разделенного элемента?
Мне не удалось найти примеры использования сплиттера в весеннем пакетном задании. Любые рекомендации будут оценены.