Повторное использование кода в онлайн-приложении и пакетных процессах с Spring Batch - PullRequest
0 голосов
/ 26 июня 2019

У меня вопрос по поводу Spring Batch и возможности повторного использования.

Я работаю над проектом, который состоит из онлайн-приложения, разработанного с помощью Spring Mvc, и нескольких пакетных процессов, разработанных с помощью Spring Batch.Некоторые из вариантов использования онлайн также выполняются в пакетных процессах.

Например, давайте представим, что наше онлайн-приложение - это Sagan-приложение Spring * , а вариант интерактивного использования, который мы хотим повторно использовать в пакетном режиме, - createOrUpdateMemberProfile .Из онлайн-приложения в каждом запросе создается или обновляется отдельный профиль участника.Однако в пакетном процессе создается много профилей участников, считывающих информацию из файла CSV.

Чтобы реализовать это, первый вариант - сохранить метод createOrUpdateMemberProfile в том виде, как он есть, и разработать новый код для пакетного процесса с помощью Spring Batch, используя его ItemWriters и другие элементы.Таким образом, я разрабатываю сценарий использования два раза: один для онлайн-транзакций, а второй для пакетных процессов.

Второй вариант заключается в повторном использовании createOrUpdateMemberProfile метода в пакетном процессе с ItemWriterAdapter .Таким образом, я повторно использую онлайн-метод, но полагаю, что теряю некоторую производительность, потому что избавляюсь от чан-ориентированной обработки .В зависимости от количества профилей участников, создаваемых из файла CSV, это может быть немного рискованно.

Третий и последний вариант - избавиться от метода createOrUpdateMemberProfile и реализовать пакетный процесс с помощью Spring Batch, который также вызывается из онлайн-приложения.То есть онлайн-приложение запустит задание, но вместо создания множества профилей участников оно создаст только один.Таким образом, я повторно использую код, но он звучит для меня очень странно, и я забрасываю его заранее.

Прямо сейчас я заинтересован во втором варианте, но мне интересно, теряю ли я что-то, кроме производительности, или я буду бороться с другим аспектом, о котором я не знаю.Любой совет или предложение будут оценены.

Спасибо.

...