Удивительно, но да, это допустимый шаблон.
Опрос каждые 5 секунд может использовать меньше общих ресурсов, чем отправка базой данных уведомлений pu sh (даже при условии, что это поддерживает БД).
И по сравнению с тем, что клиент делает, скажем, AJAX вызов каждые 5 секунд, для чего требуется каждый раз устанавливать соединение с БД, это также может быть более эффективным (за счет того, что сокет SSE открыт все время).
Создание новых объектов ExecutorService вызывает исключение JDB C для пула и, в конечном итоге, приводит к зависанию приложения.
Является ли исчерпание пула из-за наличия только одного пользователь, опрашивая каждые 5 секунд? Или это связано с большим количеством пользователей, каждый из которых держит соединение с базой данных открытым?
Если последнее, сделайте пул достаточно большим, чтобы поддерживать максимальное количество одновременно подключенных пользователей, которое вы хотите разрешить.
Если первое, вы должны освободить ресурс после опроса, перед выполнением режима ожидания 5000 мс, или открыть ресурс один раз за пределами l oop, а затем найти способ просто повторно выполнить запрос внутри бесконечного l oop.
(Извините, я не знаком с ExecutorService
или Spring
; возможно, это просто слишком высокоуровневая абстракция для запросов к базе данных, и вам нужно использовать функции более низкого уровня?)
Кстати, SSE против веб-сокетов здесь не будет иметь значения. Веб-сокеты предоставляют вам более сложный протокол в обмен на то, что он является двусторонним, а не односторонним, но все остальное в значительной степени совпадает. Т.е. у вас все еще есть выделенный сокет между клиентом и вашим веб-сервисом, и у вас все еще есть бесконечный l oop, опрашивающий базу данных.