Привет всем, возник небольшой вопрос
Есть монолит, пытаюсь из него выделить все
@Scheduled методы(в основном в них либо изменение данных в БД, либо выгрузка данных по уже готовым SQL в csv файл и отправка его на почту), возник вопрос - нужно ли делать отдельный сервис для всех задач(или может каждую задачу делать как отдельное маленькое приложение), нужен ли SpringBatch, нужно ли тянуть все entity или же можно обойтись JDBC(SQL для нужных данных уже готовы, мапперы написать не проблема).
Есть вариант что я делаю велосипед, и есть уже готовое решение для такого рода задач, а я о нем не в курсе :(
1. Batch или не Batch зависит от того, устраивает ли тебя модель Spring Batch. Руками batch обработку никто делать не запрещает.
2. JPA или JDBC - это тоже сложный вопрос. Голый SQL на JDBC Template (например), дольше писать, но ты точно знаешь, где и сколько запросов у тебя выполнится. на JPA ты вроде как знаешь, будет ли у тебя 1 запрос или n+1, но часто получается, что знаешь не всегда и надо каждый раз проверять)
3. JPA 2.1 кажется до сих пор не поддерживает операцию merge, т.е. вы вызове save у тебя идет сначала select, а потом либо update, либо insert. Но тут могу ошибаться. Поправьте, если кто знает. (Это конечно исправляется написанием своего query. Но если всегда писать свои query, почему бы просто сразу не взть JDBC Template?)
4. И у монолита, и у отдельного приложения есть плюсы и минусы. Минусы отдельных приложений - это еще по 1 точке отказа, на которую нужен отдельный мониторинг, которую надо также деплоить, обновлять и все такое. Минус монолита - можно распластать логику по всему приложению и концы с концами не сыщешь потом. Вообще CRON задачи, если их много, вполне себе можно вынести в отдельное приложение, создать там какую-нибудь мини-модель данных, аля задача с id, именем, временем запуска и статусом задачи и получить хороший более-менее контроль над CRON задачами, которые запускались, их статусами, если она отработали или не отработали