CompletableFuture in Spring MVC
Я рассматриваю возможность использования CompletableFuture
начать обработку чего-либо в базе данных. Операция займет несколько секунд, но я хочу вернуть управление обратно в браузер, не дожидаясь его завершения.
Мой вопрос: это безопасно? Есть ли риск, что мой Asynchronous
задача будет собирать мусор, потому что первоначальный запрос вернул ответ?
1 ответ
Вы можете получить приведенное ниже исключение, когда запрос выполнен, и завершаемый будущий поток все еще выполняется. В частности, я видел эту ошибку при попытке получить данные из базы данных, так как компонент базы данных был определен с помощью прокси-сервера с заданными областями действия (сеанс).
java.lang.IllegalStateException: не найден связанный с потоком запрос:
Обходное решение:-
Вызвал другой сервис RESTFul для запуска задачи в новом запросе
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
CompletableFuture.supplyAsync(() -> callRestFulService(Integer.valueOf(id)),
taskExecutor);
Заметка:-
Я только что поделился своим опытом. Могут быть и другие способы справиться с этим сценарием, или, если у вас нет взаимодействия с базой данных, он также может работать.