#java #spring #spring-boot #hibernate #spring-data-jpa
Вопрос:
У меня есть функция в spring boot, которая проверяет каждые 10 секунд (100 мс) наличие любого существующего объекта в базе данных JPA SQL, обрабатывает запрошенные действия и удаляет объект после завершения действий. Проблема в том, что проверка базы данных каждые 100 мс требует очень много памяти, дорого и расточительно, и раньше приводила к сбоям (потому что я запускаю это на бесплатном сервере и увеличиваю объем памяти). Мне было интересно, есть ли метод, аналогичный @scheduled
тому , который запускает метод, если таблица бд содержит какие-либо строки (в принципе, если exampleRepository.findAll()
не возвращается null
, то мой метод запускается)?
Спасибо, ребята!
Ответ №1:
Что ж, есть пара вариантов, которые вы могли бы попробовать.
- Если ваша «обработка» — это просто еще одно действие с базой данных, вставка/обновление другой таблицы, то почему бы вам не попробовать триггеры базы данных?
- Вы можете воспользоваться архитектурой, управляемой событиями, использовать очередь сообщений или предоставить API в своей службе, которая будет напрямую использовать данные. Планировщики, как правило, являются последним средством в таких случаях.
- Проблема нехватки памяти может быть связана не с ограниченным объемом памяти, а с тем, как вы извлекаете данные из базы данных. Вместо загрузки всех данных сразу используйте меньшие фрагменты и выполняйте пакетную обработку.
Комментарии:
1. Большое вам спасибо за ваш ответ! Мои элементы уже упакованы :), и поскольку мой код построен на базе других кодов с закрытым исходным кодом, к сожалению, обработка API будет невозможна. Я обязательно попробую db запускает выстрел!